text:
Home Exchange MCX: Retaining Monopoly in Commodities Market?
MCX: Retaining Monopoly in Commodities Market?
Exchange PA Wealth · September 4, 2020 · 0 Comment
Multi Commodity Exchange of India (MCX) is the leading commodities exchange in India that offers online trading, clearing and settlement of commodity futures transactions by providing a platform for price discovery and risk management. It received permanent recognition from the Government of India on 26 September, 2003. Then, the company started its operations in November 2003 under the regulatory framework of Forward Markets Commission (FMC).
Quick Links. Click to navigate directly to the detailed paragraph:
Year wise Journey of MCX
Shareholding Pattern of MCX
Executive Management of MCX
Commodity wise Revenue Segments
MCX Operational Parameters to study
Key Financial Highlights
Cost Structure of MCX
Major performance impacting Factors
MCX Growth Opportunities
Key Risk/Concerns
Valuation of MCX
MCX facilitates trading in futures based on contract specifications and provides a diverse range of bullion, ferrous and non-ferrous metals, energy, weather and a number of agricultural commodities. From September 2015, Securities and Exchange Board of India (SEBI) regulates MCX, after the merger of FMC and SEBI.
MCX has a user- friendly and scalable technology framework that facilitates real-time data-feed on trading prices, trading volume and other information on the commodity futures contracts traded on MCX. Also, the company has an extensive national reach, with 688 registered members and 54,471 Authorized Persons through 27, 74,349 terminals with its presence in around 1,041 cities and towns across India as on 30 June 2020.
(A) Journey of MCX
Multi Commodity Exchange of India Ltd incorporated in 2002 for setting up a nationwide online multi-commodity marketplace.
MCX entered into a license agreement with London Metal Exchange.
Forged Product Licensing agreement with New York Mercantile Exchange (CME Group).
MCX became a member of the International Organization of Securities Commissions.
2013: NSEL Scam/Jignesh Shah Scam:
Jignesh Shah, the founder of NSEL (National Spot Exchange Ltd) and MCX and co- founder of FTIL was arrested by the Mumbai Police on 7 May 2014 for assisting NSEL defaulters in money laundering. But on 22 August 2014, he was granted bail by Bombay High Court as there was no money trail to Jignesh Shah.
In December of 2013, the Forwards Market Commission declared Shah unfit to hold any position at the MCX exchange. This is because, as per FMA, he was the highest beneficiary of this scam. As a result, Mr. Shah stepped down from the board of MCX in 2013.
Then in 2014, FMC asked FTIL to bring down its shareholding in MCX from 26% to 2%. It directed that neither Shah nor any company he controlled, should hold shares in any exchange in excess of the threshold limit of the total paid-up equity capital.
MCX signed MOU with CME Group.
Launched first-ever Gold Options contract on futures in India.
Launched Options contract in Crude Oil, Silver, Copper and Zinc.
Launched first-ever Brass futures contract in the world.
MCX's wholly-owned subsidiary – MCXCCL received recognition to act as a Clearing Corporation and commenced operations from September 03, 2018.
Became a member of the World Federation of Exchanges.
Launched an Index Series "iCOMDEX" that gives information on market movements in key commodities traded on MCX and consists of composite, sectoral (bullion & metal) and single commodity ER indices.
Conversion of all MCX Base Metals futures contracts to delivery-based settlement mode from Both-options settlement mode from March 2019 and onwards.
Introduced 1 gram delivery based Gold Petal Contract.
MCX also signed MOU with Zhengzhou Commodity Exchange.
Further, Launched Kapas Contract.
Conversion of Silver Mini (5 kg) & Micro (1 kg) into delivery based contracts.
Also, launched of deliverable 'Option in goods' with Gold 100 grams and Silver 5 kg as underlying.
(B) Shareholding Pattern of MCX
(C) Executive Management of MCX
(i) Mr. Saurabh Chandra – Chairman
Mr Saurabh joined MCX on 3 July 2016. He holds Bachelor's Degree from Indian Institute of Technology, Kanpur. Also, he is an IAS Officer (1978-2015) – Batch of Uttar Pradesh Cadre. He has been Former Secretary to the Ministry of Petroleum & Gas, Former Secretary in the Department of Industrial Policy and Promotion, Also, he worked in the Ministry of Finance, Ministry of Commerce & Industry, Ministry of Chemicals & Fertilizers – in the Government of India. His age is 54 years.
(ii) Mr. P.S. Reddy – MD & CEO
Mr Reddy joined MCX in May 2019. Previously, he held the position of MD & CEO of CDSL & SEBI did not approve . He also worked with BSE for 18 years. By qualification, he did B.A., Economics, Andhra University, Visakhapatnam, India & Master of Arts, Economics, University of Hyderabad.
His remuneration for FY20 amounted to Rs. 1.96 crore which is 0.52% of the total revenue & 0.83% of the PAT.
(D) Business Segments of MCX
MCX derives its revenues from Transaction Fees, Admission Fees, Annual Subscription Fees, Warehouse Income, Data Feed Income, Terminal Charges and Connectivity Income.
As BSE is for trading for shares, MCX is for the trading of commodities. The commodities include gold, silver & other precious metals along with agricultural commodities like cotton, coffee etc. Just as share certificates can be traded in equity markets, similarly, commodities can be traded in commodity markets called the MCX trading. Commodities are mostly bought & sold in what we call a futures transaction.
Benefits to Small Commodity Producers
The MCX Trading benefits the farmers/producers of commodities, because they get better prices for their produce. With an organized MCX Trading market & terminals everywhere, the producers now know what the market prices for their commodities are. Hence, they have a better negotiating power with the middleman. With the MCX Trading, it is now more profitable to produce commodities.
(E) Commodity wise Revenue of MCX
Bullion & Energy segments contribute 78-80% of the Revenue of company.
Bullion: Gold, Gold Mini, Gold Guinea, Gold Petal, Silver, Silver Mini, Silver Micro.
Base Metals: Aluminium, Copper, Lead, Nickel, Zinc. Aluminium contributes ~1% of total revenue, Lead ~2%, Nickel ~5%, Zinc ~5% and copper ~5% of the total revenue of MCX.
Energy: Crude Oil and Natural Gas.
Agricultural Commodities: Black Pepper, Cardamom, Castor Seed, Cotton, Crude Palm Oil, Kapas, Mentha Oil and RBD Palmolein.
(F) Operational Parameters
Revenue of MCX is dependent on volume & prices of commodities traded on the exchange. Volatility in commodity prices results in increase/decrease in the volume of transactions & thus impacts the revenue.
(i) Volume of Contracts
(ii) Average Daily Turnover of MCX
The average daily turnover of futures is an important parameter to see performance of MCX. In the FY20, ADTO of MCX increased by 26% from the previous year.
(iii) Market Share of MCX
Despite the recent entry of Bombay Stock Exchange and National Stock Exchange of India in the commodity derivatives space, MCX continues to enjoy a majority market share. As on 30 June 2020, the Market Share of MCX is 96.7% in terms of the value of commodity futures contracts traded in Q-1 of FY21. Market Share in options trading is almost 100%.
NCDEX – National Commodity and Derivatives Exchange
(iv) Market Share in Key Segments of MCX
(G) Key Financial Parameters
The financial performance of MCX improved over last 3 years.
(i) Net Sales
(ii) Profit After Tax
(iii) Free Cash Flow
The company increased its free cash flow in last 3 years which is a key factor.
(iv) ROE
ROE expansion from 8-9% to 14% in FY20.
(v) ROCE
Impressive ROCE expansion from 9.76% to 15.85% in FY20.
(vi) PBIDT Margin
Operating margin has remained stable over last 10 years.
(vi) PAT Margin
(vii) MCX Dividend Payout Ratio
(H) Cost Structure
The management is focusing to control costs of employee benefits including board meetings expenses & also marketing, business promotion & advertisement expenses.
(I) Major Revenue & Market Share Impacting Factors
(i) Volumes & Price Volatility
The revenue of MCX is mainly dependent on commodity market sentiments. The price volatility results in increase or decrease in volume of commodities traded.
FY16
The company achieved about 57% year-on-year growth in the number of contracts traded. Even though most of the commodity prices remained range bound during the year. The market share remained almost at same level at 84% as for FY15.
Further in FY17, MCX market share expanded to 90.37%. Even though the volume of contracts reduced by 5.13%. The major factors for volatility include prolonged strike by jewelers, continuously depressed prices of many commodities, uncertainties in physical commodity markets following demonetisation.
During FY18, the volume of commodities traded fell during first 3 quarters & recovered only during 4th quarter of FY18. The decline in prices of most commodities ended during the year. Crude Oil prices rose by about 40% during the year. Base metals touched multi year highs due to tight supply on account of environmental concerns in China & Philippines. The overall volumes mainly hit by Bullion segment. Volume of contracts traded on MCX fell by about 8%. On the other hand, the company maintained its market share at 89.58%.
The average daily turnover increased by around 21%. On the other hand volumes increased by 20%. The market share increased to 91.6%. The major growth driving factors include recovery in base metals as well as bullion & most significantly, crude oil volumes.
The year witnessed improved financial & operational performance with average daily turnover increase by 26.42%. Also, volumes increased by 20%. Moreover, the market share in futures trading enhanced to 94.01% & 100% in options trading. Apart from base metals, all commodities traded were in rising mode.
(ii) Growth boosted by Products Launch
New product launches by MCX each year contribute in expansion in volumes as well as financial performance. On products front, in FY19, SEBI permitted Options on commodity futures, MCX launched Options trading on the futures of Silver, Zinc, Copper & Crude oil in 2018-19, in addition to Gold options launched in 2017-18. As participation in these products gained traction, it evinced participation interest from hedgers, due to simplicity of participation & straightforwardness of exposure which is similar to a 'price insurance'.
Currently, MCX does not levy any fee for option trading contributing around 4% of overall turnover.
Also during FY19, MCX launched Base Metals contracts that are compulsory delivery based & benchmarked on the domestic metal prices, paving the way for the Indian metal prices to be discovered in a transparent manner, discounting for both international & domestic fundamentals. Besides, aimed at further expanding the gold contracts' footprint in India, MCX added 5 more locations to the list of additional delivery centres for gold & gold mini contracts in addition to the existing 3 locations.
Most recently, MCX got SEBI's permission to launch future trading in ICOMDEX Bullion (based on gold and silver price) & ICOMDEX Base Metals (based on five metals – copper, aluminium, lead,
nickel and zinc) indices. Future trading in indices shall also make commodities market, place of interest to institutional participants, which would translate into healthy revenue & PAT growth.
(iii) SEBI's regulatory improvements
In the past, SEBI brought many improvements to promote participation in the commodities market. Thus, various SEBI improvements bring several opportunities for MCX for new products & segments launch. In FY18, Category III Alternative Investment Funds (AIFs) were allowed to trade in commodities market. Also, Banks were allowed to become Professional Clearing Members (PCM), while their subsidiaries were allowed to offer broking services in commodity derivatives.
Similarly, in FY19, SEBI permitted Options on commodity futures.
Moreover, SEBI allowed bank subsidiaries to offer commodity derivatives to clients, mutual funds, alternative investment funds (AIF) and portfolio management services (PMS) permitted to trade in commodity derivatives. Institutional participation, though gradual, is a big positive as globally institutional clients contributes ~50% of derivative volume.
(iv) Enhancing Market Share despite Competition
MCX gained market share even in the worst market conditions. Also, there appeared no impact when SEBI permitted other exchanges i.e. NSE & BSE to trade commodities. Even though the exchanges promoted no transaction fee on trading, but MCX retained market share. Thus, proving that it is difficult to shift trading volumes based on lower pricing.
(J) Opportunities
(i) Increase in participants categories
Volume increase is expected with institutional participation. Apart from Mutual funds & PMS, In October 2018, Eligible Foreign Entities (EFEs), who have exposure to Indian physical commodity markets, have been permitted to trade in Indian Commodity Exchanges. EFEs among the European importers of Indian commodities can thus hedge their exposures in Indian commodity markets on MCX in a cost effective manner.
Improved liquidity and diverse participation, including that by hedgers & financial institutions, strengthens the price discovery and risk management processes of the Exchange platform. This also makes hedging cost effective through reduction in impact cost of trading on the Exchange.
In FY 20, 2,15,000 Unique Client's codes are traded as compared to 2,21,000 UCC in 2018-19. Management is focusing on agri-market as only 10,800 UCC are traded and looking for increase in the number of UCC in the coming years.
(ii) Launching delivery-based Base Metal contracts
MCX has launched deliverable Base Metal contracts. These contracts are settled based on the domestic polled spot prices, against the earlier practice of following international prices. This initiative will lead to discover the Indian market prices for metals in a transparent manner. Metals volume will rise gradually when trades get used to the physical delivery mechanism.
(iii) Reach & Alliances
MCX continues to have strategic alliances with leading National and International exchanges like Indian Bullion and Jewelers Association, Indian Cotton Federation, IMC Chamber of Commerce and Industry, CME group, London Metal exchange for improved practices & information.
With 692 registered members and 54,900 authorised persons across 1010 cities and towns in India (as on 31 March 2020), MCX has an extensive national presence.
Moreover, MCX holds a strong market holding from past many years. This makes MCX at a better position to grab market opportunities & introduce newer products/segments.
(K) Risks & Concerns
(i) Competition
Till now, MCX faced no impact of entry of NSE & BSE in commodities trading. But, still the exchanges hold very vast client base & are market leaders in equities. Thus, competition risk is still there.
(ii) Negative Crude Prices
Few court cases have been filed against MCX & SEBI by traders and brokers for suffering losses due to this global crash in crude's prices. MCX has also filed an appeal in the Supreme Court to consolidate all the petitions that are filed across the country. Company may have threat of arising liabilities in future as the after-effect of these cases.
(iii) Volatility
MCX derives its revenue from Transaction Fees on the basis of future contracts traded on the Exchange. Therefore, fall in the prices of commodities decline the value and volume of the traded contracts and have a direct impact on the exchange's earning.
(iv) Global Factors
Various domestic and the global economic conditions affect India's commodity derivatives market. Thus, company's operations are also impacted by the events such as the country's industrial growth, global financial crisis, recession, inflation etc.
(v) Statutory Costs
The imposition of Commodity Transaction Tax on the sales of non- agricultural commodity futures contracts led to decline in the volumes traded on MCX's trading platform, as compared to the volumes seen in pre – Commodity Transaction Tax period.
(vi) Regulatory Risk
Changes in laws, regulations, policies taxation etc. also have direct impact on the operation of MCX & may affect the economic prospects for market inter-mediation.
COVID-19 crisis led global demand crash in storage capacities for Crude Oil which led to fall in prices. As a result, MCX April Crude Oil contract was settled at negative price. This negative pricing has adversely affected the sentiments of traders.
Due to restricted trading hours during lockdown period, Average daily Turnover slipped to Rs.15, 658 crore in April 2020 as compared to Rs.26, 356 crore in April 2019.
After restoration of normal trading hours for non-agricultural commodities from 9 a.m. to 11.30 p.m. from April 23, 2020, the ADT recovered to Rs 23,765 crore during May '20 vis-à-vis Rs 27,252 crore in May 19.
Disruptions in the physical market of commodities and to logistics infrastructure during lockdown had adversely affected availability of labour and spot prices, and impacted warehousing operations.
MCX focuses to implement cost control measures to retain its margins.
(L) MCX Valuation
Market Cap of MCX as on 4 September 2020 = Rs. 8,227.57 crore
Total Cash & Investments as on 31 March 2020 amount to Rs. 2,015 crore.
The Return on capital employed of MCX remained between 9-12% over last 5 years. ROCE expanded in FY20 to 15.85% which is a positive factor.
The company's earning growth expanded in last 2 years. Growth for FY19 is 35% & then in FY20 is 62%.
Trailing P/E estimated = 33.01
Trailing EV/EBITDA = 24.82 (Enterprise Value/EBITDA)
Earnings Yield = 4% which is low at current level.
Equity research mcx trading
BSE: Diversified Products stabilize Growth
IEX: Largest Power Exchange in India


The girl in the Supernatural: I never received my letter from Hogwarts shirt, I completely forgot to ask your name and I wish we could talk more.
The girl in the Supernatural: I never received my letter from Hogwarts shirt, I completely forgot to ask your name and I wish we could talk more. Sincerely, the guy from arsenic and old lace. Can't wait for Luna to open her new Hogwarts shirt and hat on Christmas and her luna lovegood funko pop. I love Harry potter so I had to get that hogwarts shirt. Then she took off her jacket and it was a HOGWARTS shirt. Ahh makes much more sense.
When you have a frustrating day, you put on a Supernatural: I never received my letter from Hogwarts shirt and beast your workout. Plyo is done, my nerves are a bit more settled. You fully use the ability to DE stress like you were going after Peter Pettigrew and the Killing Curse when he murdered Cedric Diggory in the graveyard. So I'm at the airport. This little 5 or 6 year old girl is walking toward me wearing what appeared to be a GWAR shirt.


See how a tranquil teahouse high up in the treetops was brought to life.
Tory brings in Native American artifacts to really reflect the history of the land this treehouse is built on.
Pete has had some bad luck with goats in the past, but tries to make friends with one while searching for the perfect tree on this farm.
Watch as several beautiful Japanese treehouses soar to new heights.
Pete Nelson and his team created a treehouse inspired by summer camp! See how it all came together in this time lapse.
Tory and Pete put the finishing design touches on this treehouse inspired by the English countryside.
Take a look at what the latest season of Treehouse Masters has to offer!
See how the treehouse came together for the winners of the Delta Ultimate Giveaway!
Nestled amongst the trees, this treehouse, made from the stuff of country legend, comes to life.
Pete and the Baines family go on the hunt for the perfect spot for their treehouse.
Pete is so excited to show the finished treehouse to one very deserving family.
The Ultimate Treehouse means something different to everyone. That's why Pete Nelson and his crew want to build one for YOU!


effective lightweight and quick drying insulation which holds it shape, trapping the warm air close to your body even when wet. The outer shell is durable noiseless and soft to touch with a built in mechanical stretch that has been treated with DWR weather proof protection. Harkila also offers a stylish scarf for men and shawl for ladies - both made from 100 per cent wool; the perfect accessories to above stylish looks.


Many of the topical ringworm treatment options are not made specifically to treat ringworm infections. Phytozine has been created to not only eliminate all of the fungi that cause ringworm but also to work effectively and fast.
Phytozine is the fastest-acting ringworm treatment!
Ringworm is a fungal infection of the skin and it has been estimated that over 20% of the United States population has been infected and sought a ringworm treatment at one point or another. This infection is highly contagious and can be spread from humans, domesticated pets and animals from even minor contact. Ringworm sores are very itchy and unsightly from the outset and if left untreated, become painful and cause severe scarring.


text:
Overland literary journal > Latest > Refugees > 'Not a boat number'
24 May 2017 15 June 2017
Refugees / Australia
'Not a boat number'
Hannah Macauley-Gierhart
Not one known for clever rhetoric at the best of times, you could almost feel the self-congratulation oozing through President Trump's attempt at the pun in that infamous tweet about the preexisting agreement between the US and Australia to 'swap' refugees:
Do you believe it? The Obama Administration agreed to take thousands of illegal immigrants from Australia. Why? I will study this dumb deal!
What is striking about this message is how it captures the current ability of those in power to so swiftly dehumanise those seeking asylum around the globe.
Sure, the arrangement to exchange a number of those trapped in Australia's offshore detention centres for some of the US's Central American refugees being held in Costa Rica doesn't make sense: why not just assimilate those seeking refuge in our respective countries ourselves? Yet the chess-game that this 'dumb deal' represents highlights leaders' problematic ability to treat the vulnerable as pawns in political maneuvering, rather than recognise their right to empathy, inclusion and safety. Whether the deal is done or dumb, it seems politics is hyper bent on exploiting the defenceless for conservative votes, real or imagined. As a result, all over the world, refugees and asylum seekers are at the mercy of a series of craven and/or villainous bureaucrats and ministers. (See Immigration Minister Peter Dutton's recent comments on the fate of 7500 asylum seekers in Australia: 'If people think they can rip the Australian taxpayer off, if people think that they can con the Australian taxpayer, then I'm sorry, the game's up.')
In the first episode of The Messenger podcast, 'Aziz, Not a Boat Number', Manus Island asylum seeker Abdul Aziz Muhamat describes the dehumanising effect not being called by name has:
Three years I never heard someone who's calling my name. I been calling with the numbers and letters. QNK002 … Numbers and letters. Three letters and three numbers, three letters and three numbers, for the last three years … My parents, they sacrifice for me to have this name. Not to have the boat number. Which is not to have these three numbers … Yeah, the name that I should have is Aziz. Aziz, not a boat. Not a boat number. Like QNK002.
Of course, the labelling of people by number, not name, is an eerie throwback to events that history has condemned, and it's unsettling that such cruelty is being repeated. Referring to asylum seekers by number is symptomatic of the anonymity that governments rely on: if they don't have names and identities, then it's easier to paint refugees and asylum seekers as monsters or bludgers or, at the very least, less than human.
Even accessing information from inside Australia's torturous detention centres is notoriously difficult; for journalist Michael Green, contact with Aziz was a rare find. Though the use of phones was eventually permitted on Manus over the course of their interaction, Green points out that 'under Australian law, even the guards and other contractors who talk publicly about conditions at the centre could be sent to gaol for up to two years. For the men in detention, like Aziz, the risks are harder to measure.' Pretending that there's nothing to see here – and punishing those who suggest there is – is allowing 'dumb deals' to go unchallenged, to be put in place, to proliferate.
As many people already know, trawling through Trump's twitter feed is bleak: there is a lot of caps-lock yelling and alarming stabs at global diplomacy. What particularly stands out is the sensationalist language that can brand all asylum seekers as illegal or potential Boston Bombers. Distrust of the migrant isn't anything new, but the blatantly racist and exploitative language of Trump, or event the Australian government, seems to be gaining traction it hasn't had in decades. How is it that instead of being laughed at, Pauline Hanson and kin are gaining popularity? How is it that Dutton's lies about the cause of the Good Friday shooting on Manus went largely unquestioned? How is it that we're facing the greatest refugee crisis of our time, yet, nations are reinforcing walls?
These are questions don't necessarily have easy answers. But a first step is to remind political leaders at every chance we get that they're actually talking about people – individuals who our governments are incarcerating and endangering indefinitely. We also need to pressure our media so they ask hard questions and point out the lies rather than repeating slogans or giving airtime to clear fallacy. Lambasting truth as fake news needs to be disparaged, not laughed off.
We're witnessing one epic chess game where countless innocents are shuffled around a board in a gross wrestle for power, and we need to change the rules so the shuffling stops.
Image: 'Manus Island Detention Centre' / Greens MPs
Hannah Macauley-Gierhart is a PhD candidate, writer, editor, mum, reader and teacher. Her work has appeared in places like Overland, Right Now, Writer's Edit, and The Huffington Post.
More by Hannah Macauley-Gierhart
3 February 2022 11 March 2022
Freedom Street—Azizah's story
Alfred Pek
There are close to 14,000 refugees held indefinitely across Indonesia. Most of them live in open Community Detention Centres, while the rest are fully destitute, living the community without any kind of support. In the city of Makassar, hundreds of them live in one particular street.
29 October 2021 19 November 2021
How Australia's deterrence policies turned Indonesia into a prison without walls
JN Joniad
As members of a vulnerable refugee population, we, the refugees of Indonesia, seek the intervention of the international community to bring us a safe future. Failing this, refugees in Indonesia will continue to be trapped within harsh systems and condemned to slow death by attrition.

redpajama_set_name: RedPajamaCommonCrawl


WATERVILLE, Maine (AP) — Divers who searched a river and nearby stream in the Maine hometown of a missing toddler have turned up no new clues.
Department of Safety spokesman Steve McCausland says divers searching for Ayla Reynolds on Friday re-examined an area in the Kennebec River in Waterville that was last searched Jan. 11. He says they also searched a stretch of the Messalonskee Stream.
Ayla was 20 months old when she was reported missing from her father's home on Dec. 17. Her disappearance has been declared a crime.
Officials said Friday's dive yielded a backpack and a knife, neither of which was connected to the case.
Police have said they believe Ayla's father and two other adults who were in the home before Ayla went missing know more than they're telling investigators.


Diary of an Aspiring Loser: What Can You Do in an Hour?
Stretching is really important to me. I notice a big difference in feeling stiff and tight when I don't stretch and I think as I age flexibility (and balance) will become more and more important.
There you have it, an hour at the gym. One thing to note is that when I'm doing weight training I will often squeeze a set of ab work (plank, knee raises, etc) between sets of another exercise for efficiency's sake. I rarely do them back to back on their own. By the time I finish all my non-ab work I've usually squeezed all the ab work in already. And stretching, it's very tempting to cut stretching when you're pressed for time but I really feel like that's a mistake.
As far as calories go I wear my heart rate monitor during my time at the gym and that usually tells me I've burned 400-475 calories in that hour. Not bad! I talk to women that think they should just do tons of cardio and burn tons of calories to lose weight. Not weight training is a major loss. I think of cardio as an investment in your weight loss for the time you are doing it and for a couple hours after but weight training is an investment in your weight loss 24 hours a day. I think more women need to know about the relationship between increased muscle mass and increased calorie burning - even while you sleep! And the idea that we are going to get "muscular" or bigger because of larger muscle mass scares some women too. It's too bad because I am convinced that weight training was what finally led me to be able to lose weight without doing an hour+ of cardio 6 days a week!
So back to the time issue - the main difference in my routine when I have more time is that I do 3 sets of everything, I probably rest a tad longer between sets, I might throw in an extra exercise or two (maybe 15 extra cardio minutes on another machine and a different weight training thing that I don't normally do), and I spend more time stretching. But honestly, that hour feels like enough, I don't feel like I'm missing out when I can't stay longer, which is nice.
So I went to the gym yesterday (Monday) and today (Tuesday), yay me!! Since I went on Sunday I guess I've met my goal for this week already. It doesn't much matter though, I'll get to the gym as many days as I can. I'm gonna keep stoking the fire that is my momentum!
You're so right on about the weights and cardio stuff and that's awesome you've already met your goals for this week!
I need to stretch more myself.
That is super efficient of you!
Reading this post today inspired me to give some serious thought to why I haven't been going to the gym and getting my weight training on! Blog post in progress... I'm using your method of questioning the "reason" (excuse) for not doing something that would be very helpful in the long term for my health and fitness goals... and providing myself with solutions to overcome those "problems".
And I say again, THANK YOU, Michelle! Your blog has provided me with many tools to help me tackle obstacles along this journey (including and especially the ones I placed on that path all by myself).
Thanks! And it's been fun for me to read the older posts you're reading too.


What is feminism and how is it manifested in our society?
That's a good place to start, because if you notice, feminism is rarely defined. In particular, the feminists don't define it. It is to their advantage not to define it because most people interpret it as meaning you're for women, or that they have a right to be educated or are just as smart as men.
But that's not what it is about at all. Feminism is about overthrowing the structure of the family and society. It rose out of the writings of Karl Marx and Friedrich Engels [authors of The Communist Manifesto]. They saw that the family was at odds with their vision of society. Owning the factories is not enough. You can't change society unless you get rid of the family.
When you attack the family, you attack society itself, including its institutions, authority and traditions, as well as the Ten Commandments and God. Religious feminists, and even secular feminists, want to overthrow God. The religious feminists have set about replacing the Trinitarian God with a mishmash of New Age spirituality, paganism, psychology, and anything that is not structured, that is not traditional, that is not Christianity.
Our society is in dire straits, and the past 50 years has been a terribly difficult period in history. Feminism has played a leading role in destroying our civilization. It corrupts a woman by creating contempt within her for her natural role. The major secular feminists believe that women should not be allowed to stay home and raise their children. The general tone is that having children and raising them is really a waste of a woman's talents and education.
Feminist philosophy has saturated our society. For example, take the fact that relatively few families have a mother at home raising her children full time with a father working to support them. Women are expected to be employed outside the home and take care of their children in their spare time. And forget about having a large family. Since women are career-centered, they simply don't have time to take care of eight or 10 children.
With the new tax laws, alimony is no longer going to be deductible to the payor or claimed as income by the payee. Effective January 1, 2019, the new law takes effect. Other changes in the tax bill worth noting include the fact that there is no longer a tax exemption for children. However, the Child Tax Credit has been doubled to $2,000, and is now not phased out until $200,000 in earnings. Additionally, the Head of Household filing status is now more valuable. All these items must be considered in any divorce negotiation in an attempt to create the most advantageous situation for the benefit of the family.
One thing I will add is this: many lawyers and mediators are calling 2018 the Year of Divorce as a result of these tax changes. Friends, divorce is one of the most traumatic events you can go through in your life. Do what you can to save your marriage if at all possible especially where there are kids. I offer a lot of unique resources for couples and would be happy to consult with you free of charge to discuss why saving your marriage may be the best option you are not considering.
However, if divorce is necessary for you and alimony is part of your divorce picture and even if you have not yet decided how you are going to move forward, I offer pre-divorce consults which help you not only to properly prepare for the prospect of divorce but also help you better understand the issues in your situation before the crisis of divorce hits. Knowledge is power and having it before you are in crisis mode makes a world of difference.


text:
Option to always have dim at max available. [invalid]
posted July 3, 2012 at 7:19:03 PM UTC
This is a feature request. Feature requests can be voted up by supporters.
Current Priority: +0
Ekaru
Ekaru July 3, 2012 at 7:19:03 PM UTC
So like, you can only set the dim up to 50% until you beat the map once. I'm perfectly fine with that part since it goes with the whole "must experience map as intended at least once" thing these toggles have going.
However, I and others would appreciate it if there was an option to make it so that the dim is set at the max available at the time you're playing the map (so 50% before you beat it once, 90% after you beat it once). Setting it to 50% on your first run through and then having to set it again to 90% after you beat it for every single map is annoying.
I think this would help people come to grips with this feature and the upcoming "Deleting BGs is not allowed" thing easier. 90% is extremely dark when it's not bugged up, so that part shouldn't be too hard to adjust to. But, having to adjust the bar for every map will easily get on some users nerves quickly.
EDIT: 'Course it still takes less time than going into the map to delete the BG (which I have never done), so it's still not *that* bad, but eh.
Here since the beginning
peppy July 3, 2012 at 7:35:28 PM UTC


text:
Home	Formula 3FIA F3 Championship	David Schumacher makes Carlin move in FIA Formula 3
David Schumacher makes Carlin move in FIA Formula 3
by Peter Allen 25 August 2020
written by Peter Allen 25 August 2020
Photo: Formula Motorsport Limited
David Schumacher has joined Carlin for the final three rounds of the FIA Formula 3 Championship season following his departure from the Charouz team.
Schumacher and his six-time grand prix winning father Ralf announced last week that he would leave Charouz having finished no higher than 12th in the 12 races run so far this season.
The 18-year-old will take over the Carlin entry that was vacated earlier this year by Enaam Ahmed, and raced over the most recent rounds by Ben Barnicoat and Leonardo Pulcini.
"I haven't quite had the season I hoped for so far", said Schumacher, who won races for his father's US Racing outfit in the Formula Regional European Championship last year before stepping up to F3.
"I want to thank the Charouz team for all their efforts over the last few months and wish them all the best for the future.
"I look forward to this new challenge now with Carlin and will be pushing hard to end the season with some strong results."
Almost all of Carlin's points this season have been scored by Clement Novalak, who has scored two Sunday podium finishes and sits 10th in the standings.
"We're excited to welcome David to the team," team boss Trevor Carlin said. "He has shown plenty of potential and we look forward to working with him for the remainder of the 2020 season.
"We don't have much time to prepare together for Spa but the team are working hard to make sure we're in good shape for the start of the weekend."
There are three more vacancies on the FIA F3 grid to be officially filled before this weekend's races at Spa: Schumacher's old Charouz seat, the Hitech GP drive freed up by Max Fewtrell's departure and a ride at Campos in place of Sophia Floersch, who will be racing in the European Le Mans Series instead.
CarlinDavid SchumacherFIA F3 Championship
Bahrain double-header to complete 2020 Formula 2 calendar
Pierre-Louis Chovet joins FIA F3 grid for Spa with Hitech


The reason for that is simple, it looks like my iphone 4 but just stretched a bit. My questions are now, what happened to the Apple creativity??? Where are new designs??? You can simple go on the internet tape "iphone 5″ and you will see those amazing looking concepts of how iphone 5 could look like!!! Apple claims it has been totally redesigned so I ask again where???
Can somebody tell me where I can see new design? New charging port (it's called lightning)? Is that a new design? Why they haven't come out with some new ideas which could blow away the competition (Samsung Galaxy III or HTC one). Maybe Apple was talking about the design of the hardware which is inside, that processor is in a new place or a battery has change its position, but really, do I really care about that staff? I will not ever see that phone from the inside, never…. All what matter for me is how the phone looks like outside and it looks for me the same… Is Apple afraid of changes? Well Apple… you better not be, because other manufacturers don't sleep and won't leave any place for mistakes. I can not believe nobody came out yet with a phone where a whole front panel is a touch screen without any buttons which are just useless (yeah Apple you could put your home button on the side of the phone and yeah it is possible). Everybody doesn't want to make any drastic changes to their phones because they don't know how people will welcome them(yeah and patents too, not everybody can have rounded corners, i'm just wondering when somebody will apply for a wheel or a cone patent…sorry it is just silly for me…) .
Nonetheless, iphone 5 probably is a great phone, it has a great processor, better graphics card, it is really slim and light. I'm sure people will enjoy it very much because I use iphone very day and I'm really happy with it. But, for people who waited for a next step in the technology, who wanted to see new awesome design, new inventions, it is unfortunately a disappointment. I know, I know many of you may disagree with me and this is your right to do. Please just keep in mind what John F. Kennedy said "We choose to go to the moon in this decade and do the other things, not because they are easy, but because they are hard" and I'm not saying that iphone 5 was an easy thing because many people work hard to build it but for me Apple haven't done anything what could be a jump in an unknown direction and to try to change the arrangement of the phone. Great achievements are not made by small steps but with new ideas which go far ahead of their times. Is iphone 5 with its design much ahead of its time? Nope.
This entry was posted in Mobile, News by administrator. Bookmark the permalink.
I just want to mention I am newbie to blogging and seriously savored your web site. Likely I'm want to bookmark your site . You surely have excellent well written articles. Kudos for sharing your webpage.
Greetings from Los angeles! I'm bored at work so I decided to check out your site on my iphone during lunch break. I love the knowledge you present here and can't wait to take a look when I get home. I'm amazed at how fast your blog loaded on my phone .. I'm not even using WIFI, just 3G .. Anyhow, very good site!
Hi would you mind sharing which blog platform you're using? I'm going to start my own blog in the near future but I'm having a tough time deciding between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your design seems different then most blogs and I'm looking for something completely unique. P.S Apologies for getting off-topic but I had to ask!
Woah! I'm really enjoying the template/theme of this site. It's simple, yet effective. A lot of times it's challenging to get that "perfect balance" between usability and visual appeal. I must say you have done a great job with this. Additionally, the blog loads extremely quick for me on Firefox. Exceptional Blog!
Woah! I'm really loving the template/theme of this website. It's simple, yet effective. A lot of times it's very difficult to get that "perfect balance" between user friendliness and visual appeal. I must say that you've done a fantastic job with this. Additionally, the blog loads very quick for me on Firefox. Excellent Blog!
Howdy! I simply want to give you a huge thumbs up for your great info you have right here on this post. I will be coming back to your site for more soon.
Hello everyone, it's my first pay a quick visit at this website, and piece of writing is really fruitful designed for me, keep up posting these types of posts.
Wow, marvelous weblog structure! How long have you been running a blog for? you made blogging look easy. The full look of your web site is great, as smartly as the content!


Double pocket model. For single clarinet attache or pochette cases.
Deluxe model. For single clarinet attache or pochette cases.
Backpack model. For single clarinet cases attache or pochette style. Will fit single oboe.
Backpack model. For double clarinet pochette cases.
Deluxe model.For double clarinet attache cases.
Deluxe model. For clarinet double clarinet pochette cases.
Double pocket model. For double or triple clarinet attache cases.
Double pochette, luxurious calfskin leather.
Buffet R-13 clarinet case replacement.
Bell of clarinets stay attached to the lower joint while in case.
Inside Features : Inside cradle made of injected high density polyurethane foam, protecting the instrument against thermal shocks. Dedicated space for 3 barrels.
Double Pochette-black rectangular wood case with red plush interior.
Buffet double leather clarinet woodshell case with plush interior for R13 Prestige A clarinets.
Bb Clarinet single with tuckaway back straps & adjust able shoulder strap & pad, Cordura covering.
All gator cases ship free within the continental U.S.A.
Very light case made from wood.
Provides protection for all 3 instruments. A must have for all travelling musicians.
Protec Amp covers are a must! All of our amp covers are made of puncture resistance nylon and feature zippered cable pockets.
Fits SKB-315 and SKB-320 cases as well as most oboe and clarinet cases.
Lightweight, sleek, injection molded design with countersunk hardware. SKB brand hardshell cases are fully warranted against defects in materials and craftsmanship for the life of the case to the original owner. That means, if your case breaks, SKB will either supply replacement parts, repair the case, or replace the case at no cost to you for as long as you own the case.
All Yamaha cases are made of either plastic, ABS plastic, or wood to provide a strong and durable outer shell.
Bb & A Clarinet double "Trekking style" case tuck-away backstraps & adjustable shouder strap & pad. Original Bam case with endless accessory space. Best seller case for many years.
Built for the Extreme Molded on Buffet Crampon RC Clarinet.
Bb & A Clarinet double "New Trekking style" case, tuck-away backstraps & adjustable shouder strap & pad.
All case covers include outside pocket with shoulder strap.
Protec carrying bags feature a tough nylon exterior, soft lining, shoulder straps, carrying handles, accessory pockets.


On December 15, we all will be required to wear a helmet inside Saigon for the very first time. In fact, you are seeing people wearing helmets more and more each day.
My student from Vietnam Airlines brought me a nice helmet from Taiwan that meets ISO requirements a couple months ago. Surprisingly, I am actually wearing it, most of the time. Well, on Saturday, I might as well get used to wearing it.
Rumor is flying around that the helmet law will only be enforced during the day but not at night. Just a rumor I am hearing but with Christmas and New Years coming, I think the police will be lax with the law during the evenings.
Here is a good article about helmets up in Hanoi. I thought about taking my helmet to a Decal Shop myself. Do you have a "cool" helmet?
There is already a lot of issue with checking your helmet in with the motorbike parking attendant and it's only the weeks leading to full implementation of the helmet law. I foresee chao in Saigon and Hanoi with issues such as where to leave ones helmet. Personal, I think it's not really realistic to require helmet within the city of Saigon, traffic is too slow for such a need, stricter helmets laws on the highway should have been the focus. Can you imagine millions of helmets with no facility for storage?


text:
Models of The Month – October 2014
October 31, 2014 / Japanese Sirens Admin / 0 Comments
Japanese pop singer, songwriter and actress from Suminoe-ku, Osaka, Japan. She is a popular artist on the Avex Trax label and is best known for her 2003 hit "Sakuranbo," which stayed in the Top 200 Oricon Weekly Singles Chart for 103 weeks.
Mirei Kiritani (桐谷美玲 Kiritani Mirei) is a Japanese actress who played Mayoi Ayasato in the Phoenix Wright: Ace Attorney live-action film adaptation and voiced her in the Professor Layton VS Phoenix Wright: Ace Attorney crossover game.
Chiaki Morita (森田 樹優 Morita, Chiaki, born in Hokkaido on July 1, 1968) is a Japanese voice actress, who is affiliated with Across Entertainment. Her birthname was originally given in Katakana language (森田 チアキ). She has done voice roles for Anime and Video games. She also did some foreign voice-dubbing as well. She is sometimes mistaken for Japanese-Filipina professional model Chiaki Morita, as they are both popular but their names differ from two letters when written in Kanji. Chiaki Morita has also worked as a Teacher in Certified elementary and kindergarten schools.
Japanese actress-model Nozomi Sasaki (佐々木 希) in wedding dress by FANCY Co., with various colorful designs beside the classic white.
Kiko Mizuhara 水原 希子 – Behind The Scenes Video
Yuna Shishido (宍戸佑名 Shishido Yūna, born June 23, 1985), known by the stage name Kavka Shishido (シシド・カフカ Shishido Kafuka) is a Japanese drummer and vocalist. Originally a member of the rock band The News, she debuted as a solo musician in 2012 and released her debut album Kavkanize in 2013. She prominently plays the drums in all of her promotions.
Shishido was given the name Kavka for her stage name by copy editor Junpei Watanabe. Shishido always wore black, reminding him of a crow. He picked the Czech word kavka, which refers to the daurian jackdaw.
October 9, 2014 / Japanese Sirens Admin / 0 Comments
Goto Maki (後藤真希) is an Japanese urban pop singer, currently signed to avex trax. Goto originally made her debut in 1999 as part of Hello! Project, and as the only third generation member of Morning Musume. She has sold over 1,576,761 copies in Japan alone being the second best-selling solo artist in Hello! Project. Early in Summer 2008, Goto left Hello! Project and moved to the rhythm zone label. In 2010 she transferred to avex trax.
Actress Miori Takimoto (瀧本美織) in July 2014 issue of Steady Magazine, in collaboration with Japanese clothing brand Jol Fraise and online fashion shop Honeys.
Model Rola (of Bengali, Japanese and Russian descent) featuring for fashion brand Rebecca Minkoff 2014 Spring/Summer collection.
Kiko Mizuhara (水原 希子 Mizuhara Kiko, born Audrie Noriko Daniel, October 15, 1990) is a model, actress and singer of American/Korean descent, active in Japan.
Saeko 紗栄子 – Behind The Scenes Video
Nanao is a Japanese fashion model and actress from Saitama Prefecture. She began her career in 2009 at the age of 20 as an martial arts ring girl and race queen before modeling for the Japanese fashion magazine PINKY.
Models of The Month – September


text:
package io.github.resilience4j.ratelimiter;

import io.github.resilience4j.core.EventConsumer;
import io.github.resilience4j.core.exception.AcquirePermissionCancelledException;
import io.github.resilience4j.ratelimiter.event.RateLimiterEvent;
import io.github.resilience4j.ratelimiter.event.RateLimiterOnFailureEvent;
import io.github.resilience4j.ratelimiter.event.RateLimiterOnSuccessEvent;
import io.github.resilience4j.ratelimiter.internal.AtomicRateLimiter;
import io.vavr.CheckedFunction0;
import io.vavr.CheckedFunction1;
import io.vavr.CheckedRunnable;
import io.vavr.collection.HashMap;
import io.vavr.collection.Map;
import io.vavr.control.Either;
import io.vavr.control.Try;

import java.time.Duration;
import java.util.concurrent.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * A RateLimiter instance is thread-safe can be used to decorate multiple requests.
 * <p>
 * A RateLimiter distributes permits at a configurable rate. {@link #acquirePermission()} blocks if
 * necessary until a permit is available, and then takes it. Once acquired, permits need not be
 * released.
 */
public interface RateLimiter {

    /**
     * Creates a RateLimiter with a custom RateLimiter configuration.
     *
     * @param name              the name of the RateLimiter
     * @param rateLimiterConfig a custom RateLimiter configuration
     * @return The {@link RateLimiter}
     */
    static RateLimiter of(String name, RateLimiterConfig rateLimiterConfig) {
        return of(name, rateLimiterConfig, HashMap.empty());
    }

    /**
     * Creates a RateLimiter with a custom RateLimiter configuration.
     *
     * @param name              the name of the RateLimiter
     * @param rateLimiterConfig a custom RateLimiter configuration
     * @param tags              tags to assign to the RateLimiter
     * @return The {@link RateLimiter}
     */
    static RateLimiter of(String name, RateLimiterConfig rateLimiterConfig,
        Map<String, String> tags) {
        return new AtomicRateLimiter(name, rateLimiterConfig, tags);
    }

    /**
     * Creates a RateLimiter with a custom RateLimiterConfig configuration.
     *
     * @param name                      the name of the RateLimiter
     * @param rateLimiterConfigSupplier a supplier of a custom RateLimiterConfig configuration
     * @return The {@link RateLimiter}
     */
    static RateLimiter of(String name, Supplier<RateLimiterConfig> rateLimiterConfigSupplier) {
        return of(name, rateLimiterConfigSupplier.get(), HashMap.empty());
    }

    /**
     * Creates a RateLimiter with a custom RateLimiterConfig configuration.
     *
     * @param name                      the name of the RateLimiter
     * @param rateLimiterConfigSupplier a supplier of a custom RateLimiterConfig configuration
     * @param tags                      tags to assign to the RateLimiter
     * @return The {@link RateLimiter}
     */
    static RateLimiter of(String name, Supplier<RateLimiterConfig> rateLimiterConfigSupplier,
        Map<String, String> tags) {
        return new AtomicRateLimiter(name, rateLimiterConfigSupplier.get(), tags);
    }

    /**
     * Creates a RateLimiter with a default RateLimiterConfig configuration.
     *
     * @param name the name of the RateLimiter
     * @return The {@link RateLimiter}
     */
    static RateLimiter ofDefaults(String name) {
        return new AtomicRateLimiter(name, RateLimiterConfig.ofDefaults());
    }

    /**
     * Returns a supplier which is decorated by a rateLimiter.
     *
     * @param rateLimiter the rateLimiter
     * @param supplier    the original supplier
     * @param <T>         the type of the returned CompletionStage's result
     * @return a supplier which is decorated by a RateLimiter.
     */
    static <T> Supplier<CompletionStage<T>> decorateCompletionStage(RateLimiter rateLimiter,
        Supplier<CompletionStage<T>> supplier) {
        return decorateCompletionStage(rateLimiter, 1, supplier);
    }

    /**
     * Returns a supplier which is decorated by a rateLimiter.
     *
     * @param rateLimiter the rateLimiter
     * @param permits     number of permits that this call requires
     * @param supplier    the original supplier
     * @param <T>         the type of the returned CompletionStage's result
     * @return a supplier which is decorated by a RateLimiter.
     */
    static <T> Supplier<CompletionStage<T>> decorateCompletionStage(RateLimiter rateLimiter,
        int permits, Supplier<CompletionStage<T>> supplier) {
        return () -> {
            final CompletableFuture<T> promise = new CompletableFuture<>();
            try {
                waitForPermission(rateLimiter, permits);
                supplier.get()
                    .whenComplete(
                        (result, throwable) -> {
                            if (throwable != null) {
                                rateLimiter.onError(throwable);
                                promise.completeExceptionally(throwable);
                            } else {
                                rateLimiter.onResult(result);
                                promise.complete(result);
                            }
                        }
                    );
            } catch (RequestNotPermitted requestNotPermitted) {
                promise.completeExceptionally(requestNotPermitted);
            } catch (Exception exception) {
                rateLimiter.onError(exception);
                promise.completeExceptionally(exception);
            }
            return promise;
        };
    }

    /**
     * Returns a Supplier which is decorated by a RateLimiter.
     * @param rateLimiter the rate limiter
     * @param supplier    the original supplier
     * @param <T>         the type of the returned Future's result
     * @param <F>         the return type of the original Supplier (extends Future<T>)
     * @return a supplier which is decorated by a rate limiter.
     */
    static <T, F extends Future<T>> Supplier<F> decorateFuture(
        RateLimiter rateLimiter,
        Supplier<? extends F> supplier
    ) {
        return decorateFuture(rateLimiter, 1, supplier);
    }

    /**
     * Returns a Supplier which is decorated by a RateLimiter.
     * @param rateLimiter the rate limiter
     * @param permits     the number of permits that this call requires
     * @param supplier    the original supplier
     * @param <T>         the type of the returned Future's result
     * @param <F>         the return type of the original Supplier (extends Future<T>)
     * @return a supplier which is decorated by a rate limiter.
     */
    static <T, F extends Future<T>> Supplier<F> decorateFuture(RateLimiter rateLimiter, int permits,
        Supplier<? extends F> supplier) {
        return () -> decorateSupplier(rateLimiter, permits, supplier)
            .get();
    }

    /**
     * Creates a supplier which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param supplier    the original supplier
     * @param <T>         the type of results supplied supplier
     * @return a supplier which is restricted by a RateLimiter.
     */
    static <T> CheckedFunction0<T> decorateCheckedSupplier(RateLimiter rateLimiter, CheckedFunction0<T> supplier) {
        return decorateCheckedSupplier(rateLimiter, 1, supplier);
    }

    /**
     * Creates a supplier which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param permits     number of permits that this call requires
     * @param supplier    the original supplier
     * @param <T>         the type of results supplied supplier
     * @return a supplier which is restricted by a RateLimiter.
     */
    static <T> CheckedFunction0<T> decorateCheckedSupplier(RateLimiter rateLimiter, int permits,
        CheckedFunction0<T> supplier) {
        return () -> {
            waitForPermission(rateLimiter, permits);
            try {
                T result = supplier.apply();
                rateLimiter.onResult(result);
                return result;
            } catch (Exception exception) {
                rateLimiter.onError(exception);
                throw exception;
            }
        };
    }

    /**
     * Creates a runnable which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param runnable    the original runnable
     * @return a runnable which is restricted by a RateLimiter.
     */
    static CheckedRunnable decorateCheckedRunnable(RateLimiter rateLimiter, CheckedRunnable runnable) {
        return decorateCheckedRunnable(rateLimiter, 1, runnable);
    }

    /**
     * Creates a runnable which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param permits     number of permits that this call requires
     * @param runnable    the original runnable
     * @return a runnable which is restricted by a RateLimiter.
     */
    static CheckedRunnable decorateCheckedRunnable(RateLimiter rateLimiter, int permits, CheckedRunnable runnable) {
        return () -> {
            waitForPermission(rateLimiter, permits);
            try {
                runnable.run();
                rateLimiter.onSuccess();
            } catch (Exception exception) {
                rateLimiter.onError(exception);
                throw exception;
            }
        };
    }

    /**
     * Creates a function which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param function    the original function
     * @param <T>         the type of function argument
     * @param <R>         the type of function results
     * @return a function which is restricted by a RateLimiter.
     */
    static <T, R> CheckedFunction1<T, R> decorateCheckedFunction(RateLimiter rateLimiter,
        CheckedFunction1<T, R> function) {
        return decorateCheckedFunction(rateLimiter, 1, function);
    }

    /**
     * Creates a function which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param permits     number of permits that this call requires
     * @param function    the original function
     * @param <T>         the type of function argument
     * @param <R>         the type of function results
     * @return a function which is restricted by a RateLimiter.
     */
    static <T, R> CheckedFunction1<T, R> decorateCheckedFunction(RateLimiter rateLimiter,
        int permits, CheckedFunction1<T, R> function) {
        return (T t) -> decorateCheckedSupplier(rateLimiter, permits, () -> function.apply(t))
            .apply();
    }

    /**
     * Creates a function which is restricted by a RateLimiter.
     *
     * @param rateLimiter       the RateLimiter
     * @param permitsCalculator calculates the number of permits required by this call based on the
     *                          functions argument
     * @param function          the original function
     * @param <T>               the type of function argument
     * @param <R>               the type of function results
     * @return a function which is restricted by a RateLimiter.
     */
    static <T, R> CheckedFunction1<T, R> decorateCheckedFunction(RateLimiter rateLimiter,
        Function<T, Integer> permitsCalculator, CheckedFunction1<T, R> function) {
        return (T t) -> decorateCheckedFunction(rateLimiter, permitsCalculator.apply(t), function)
            .apply(t);
    }

    /**
     * Creates a supplier which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param supplier    the original supplier
     * @param <T>         the type of results supplied supplier
     * @return a supplier which is restricted by a RateLimiter.
     */
    static <T> Supplier<T> decorateSupplier(RateLimiter rateLimiter, Supplier<T> supplier) {
        return decorateSupplier(rateLimiter, 1, supplier);
    }

    /**
     * Creates a supplier which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param permits     number of permits that this call requires
     * @param supplier    the original supplier
     * @param <T>         the type of results supplied supplier
     * @return a supplier which is restricted by a RateLimiter.
     */
    static <T> Supplier<T> decorateSupplier(RateLimiter rateLimiter, int permits, Supplier<T> supplier) {
        return decorateCheckedSupplier(rateLimiter, permits, supplier::get)
            .unchecked();
    }

    /**
     * Creates a supplier which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param supplier    the original supplier
     * @param <T>         the type of results supplied supplier
     * @return a supplier which is restricted by a RateLimiter.
     */
    static <T> Supplier<Try<T>> decorateTrySupplier(RateLimiter rateLimiter, Supplier<Try<T>> supplier) {
        return decorateTrySupplier(rateLimiter, 1, supplier);
    }

    /**
     * Creates a supplier which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param permits     number of permits that this call requires
     * @param supplier    the original supplier
     * @param <T>         the type of results supplied supplier
     * @return a supplier which is restricted by a RateLimiter.
     */
    static <T> Supplier<Try<T>> decorateTrySupplier(RateLimiter rateLimiter, int permits, Supplier<Try<T>> supplier) {
        return () -> {
            try {
                waitForPermission(rateLimiter, permits);
                try {
                    Try<T> result = supplier.get();
                    if (result.isSuccess()) {
                        rateLimiter.onResult(result.get());
                    } else {
                        rateLimiter.onError(result.getCause());
                    }
                    return result;
                } catch (Exception exception) {
                    rateLimiter.onError(exception);
                    throw exception;
                }
            } catch (RequestNotPermitted requestNotPermitted) {
                return Try.failure(requestNotPermitted);
            }
        };
    }

    /**
     * Creates a supplier which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param supplier    the original supplier
     * @param <T>         the type of results supplied supplier
     * @return a supplier which is restricted by a RateLimiter.
     */
    static <T> Supplier<Either<Exception, T>> decorateEitherSupplier(RateLimiter rateLimiter,
        Supplier<Either<? extends Exception, T>> supplier) {
        return decorateEitherSupplier(rateLimiter, 1, supplier);
    }

    /**
     * Creates a supplier which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param permits     number of permits that this call requires
     * @param supplier    the original supplier
     * @param <T>         the type of results supplied supplier
     * @return a supplier which is restricted by a RateLimiter.
     */
    static <T> Supplier<Either<Exception, T>> decorateEitherSupplier(RateLimiter rateLimiter,
        int permits, Supplier<Either<? extends Exception, T>> supplier) {
        return () -> {
            try {
                waitForPermission(rateLimiter, permits);
                try {
                    Either<? extends Exception, T> result = supplier.get();
                    if (result.isRight()) {
                        rateLimiter.onResult(result.get());
                    } else {
                        rateLimiter.onError(result.getLeft());
                    }
                    return Either.narrow(result);
                } catch (Exception exception) {
                    rateLimiter.onError(exception);
                    throw exception;
                }
            } catch (RequestNotPermitted requestNotPermitted) {
                return Either.left(requestNotPermitted);
            }
        };
    }

    /**
     * Creates a callable which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param callable    the original callable
     * @param <T>         the type of results supplied by callable
     * @return a callable which is restricted by a RateLimiter.
     */
    static <T> Callable<T> decorateCallable(RateLimiter rateLimiter, Callable<T> callable) {
        return decorateCallable(rateLimiter, 1, callable);
    }

    /**
     * Creates a callable which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param permits     number of permits that this call requires
     * @param callable    the original callable
     * @param <T>         the type of results supplied by callable
     * @return a callable which is restricted by a RateLimiter.
     */
    static <T> Callable<T> decorateCallable(RateLimiter rateLimiter, int permits, Callable<T> callable) {
        return () -> decorateCheckedSupplier(rateLimiter, permits, callable::call)
            .unchecked()
            .get();
    }

    /**
     * Creates a consumer which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param consumer    the original consumer
     * @param <T>         the type of the input to the consumer
     * @return a consumer which is restricted by a RateLimiter.
     */
    static <T> Consumer<T> decorateConsumer(RateLimiter rateLimiter, Consumer<T> consumer) {
        return decorateConsumer(rateLimiter, 1, consumer);
    }

    /**
     * Creates a consumer which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param permits     number of permits that this call requires
     * @param consumer    the original consumer
     * @param <T>         the type of the input to the consumer
     * @return a consumer which is restricted by a RateLimiter.
     */
    static <T> Consumer<T> decorateConsumer(RateLimiter rateLimiter, int permits,
        Consumer<T> consumer) {
        return (T t) -> {
            waitForPermission(rateLimiter, permits);
            try {
                consumer.accept(t);
                rateLimiter.onSuccess();
            } catch (Exception exception) {
                rateLimiter.onError(exception);
                throw exception;
            }
        };
    }

    /**
     * Creates a consumer which is restricted by a RateLimiter.
     *
     * @param rateLimiter       the RateLimiter
     * @param permitsCalculator calculates the number of permits required by this call based on the
     *                          functions argument
     * @param consumer          the original consumer
     * @param <T>               the type of the input to the consumer
     * @return a consumer which is restricted by a RateLimiter.
     */
    static <T> Consumer<T> decorateConsumer(RateLimiter rateLimiter,
        Function<T, Integer> permitsCalculator, Consumer<T> consumer) {
        return (T t) -> decorateConsumer(rateLimiter, permitsCalculator.apply(t), consumer).accept(t);
    }

    /**
     * Creates a runnable which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param runnable    the original runnable
     * @return a runnable which is restricted by a RateLimiter.
     */
    static Runnable decorateRunnable(RateLimiter rateLimiter, Runnable runnable) {
        return decorateRunnable(rateLimiter, 1, runnable);
    }

    /**
     * Creates a runnable which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param permits     number of permits that this call requires
     * @param runnable    the original runnable
     * @return a runnable which is restricted by a RateLimiter.
     */
    static Runnable decorateRunnable(RateLimiter rateLimiter, int permits, Runnable runnable) {
        return decorateCheckedRunnable(rateLimiter, permits, runnable::run)
            .unchecked();
    }

    /**
     * Creates a function which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param function    the original function
     * @param <T>         the type of the input to the function
     * @param <R>         the type of the result of the function
     * @return a function which is restricted by a RateLimiter.
     */
    static <T, R> Function<T, R> decorateFunction(RateLimiter rateLimiter,
        Function<T, R> function) {
        return decorateFunction(rateLimiter, 1, function);
    }

    /**
     * Creates a function which is restricted by a RateLimiter.
     *
     * @param rateLimiter the RateLimiter
     * @param permits     number of permits that this call requires
     * @param function    the original function
     * @param <T>         the type of the input to the function
     * @param <R>         the type of the result of the function
     * @return a function which is restricted by a RateLimiter.
     */
    static <T, R> Function<T, R> decorateFunction(RateLimiter rateLimiter, int permits, Function<T, R> function) {
        return decorateCheckedFunction(rateLimiter, permits, function::apply)
            .unchecked();
    }

    /**
     * Creates a function which is restricted by a RateLimiter.
     *
     * @param rateLimiter       the RateLimiter
     * @param function          the original function
     * @param permitsCalculator calculates the number of permits required by this call based on the
     *                          functions argument
     * @param <T>               the type of the input to the function
     * @param <R>               the type of the result of the function
     * @return a function which is restricted by a RateLimiter.
     */
    static <T, R> Function<T, R> decorateFunction(RateLimiter rateLimiter,
        Function<T, Integer> permitsCalculator, Function<T, R> function) {
        return (T t) -> decorateFunction(rateLimiter, permitsCalculator.apply(t), function).apply(t);
    }

    /**
     * Will wait for permission within default timeout duration.
     *
     * @param rateLimiter the RateLimiter to get permission from
     * @throws RequestNotPermitted                 if waiting time elapsed before a permit was
     *                                             acquired.
     * @throws AcquirePermissionCancelledException if thread was interrupted during permission wait
     */
    static void waitForPermission(final RateLimiter rateLimiter) {
        waitForPermission(rateLimiter, 1);
    }

    /**
     * Will wait for required number of permits within default timeout duration.
     *
     * @param rateLimiter the RateLimiter to get permission from
     * @param permits     number of permits we have to acquire
     * @throws RequestNotPermitted                 if waiting time elapsed before a permit was
     *                                             acquired.
     * @throws AcquirePermissionCancelledException if thread was interrupted during permission wait
     */
    static void waitForPermission(final RateLimiter rateLimiter, int permits) {
        boolean permission = rateLimiter.acquirePermission(permits);
        if (Thread.currentThread().isInterrupted()) {
            throw new AcquirePermissionCancelledException();
        }
        if (!permission) {
            throw RequestNotPermitted.createRequestNotPermitted(rateLimiter);
        }
    }

    /**
     * Will drain permits remaining in cycle if calls result meet the criteria defined in
     * {@link RateLimiterConfig#getDrainPermissionsOnResult()}.
     *
     * @param callsResult result of a methods call that was rate limiter by this rate limiter
     * @deprecated because of changing visibility to private in Java9+
     */
    @Deprecated
    default void drainIfNeeded(Either<? extends Throwable, ?> callsResult) {
        Predicate<Either<? extends Throwable, ?>> checker = getRateLimiterConfig()
            .getDrainPermissionsOnResult();
        if (checker != null && checker.test(callsResult)) {
            drainPermissions();
        }
    }

    /**
     * Decorates and executes the decorated CompletionStage.
     *
     * @param supplier the original CompletionStage
     * @param <T>      the type of results supplied by this supplier
     * @return the decorated CompletionStage.
     */
    default <T> CompletionStage<T> executeCompletionStage(Supplier<CompletionStage<T>> supplier) {
        return decorateCompletionStage(this, supplier).get();
    }

    /**
     * Dynamic rate limiter configuration change. This method allows to change timeout duration of
     * current limiter. NOTE! New timeout duration won't affect threads that are currently waiting
     * for permission.
     *
     * @param timeoutDuration new timeout duration
     */
    void changeTimeoutDuration(Duration timeoutDuration);

    /**
     * Dynamic rate limiter configuration change. This method allows to change count of permissions
     * available during refresh period. NOTE! New limit won't affect current period permissions and
     * will apply only from next one.
     *
     * @param limitForPeriod new permissions limit
     */
    void changeLimitForPeriod(int limitForPeriod);

    /**
     * Acquires a permission from this rate limiter, blocking until one is available, or the thread
     * is interrupted. Maximum wait time is {@link RateLimiterConfig#getTimeoutDuration()}
     *
     * <p>If the current thread is {@linkplain Thread#interrupt interrupted}
     * while waiting for a permit then it won't throw {@linkplain InterruptedException}, but its
     * interrupt status will be set.
     *
     * @return {@code true} if a permit was acquired and {@code false} if waiting timeoutDuration
     * elapsed before a permit was acquired
     */
    default boolean acquirePermission() {
        return acquirePermission(1);
    }

    /**
     * Acquires the given number of permits from this rate limiter, blocking until one is available,
     * or the thread is interrupted. Maximum wait time is {@link RateLimiterConfig#getTimeoutDuration()}
     *
     * <p>If the current thread is {@linkplain Thread#interrupt interrupted}
     * while waiting for a permit then it won't throw {@linkplain InterruptedException}, but its
     * interrupt status will be set.
     *
     * @param permits number of permits - use for systems where 1 call != 1 permit
     * @return {@code true} if a permit was acquired and {@code false} if waiting timeoutDuration
     * elapsed before a permit was acquired
     */
    boolean acquirePermission(int permits);

    /**
     * Reserves a permission from this rate limiter and returns nanoseconds you should wait for it.
     * If returned long is negative, it means that you failed to reserve permission, possibly your
     * {@link RateLimiterConfig#getTimeoutDuration()} is less then time to wait for permission.
     *
     * @return {@code long} amount of nanoseconds you should wait for reserved permissions. if
     * negative, it means you failed to reserve.
     */
    default long reservePermission() {
        return reservePermission(1);
    }

    /**
     * Reserves the given number permits from this rate limiter and returns nanoseconds you should
     * wait for it. If returned long is negative, it means that you failed to reserve permission,
     * possibly your  {@link RateLimiterConfig#getTimeoutDuration()} is less then time to wait for
     * permission.
     *
     * @param permits number of permits - use for systems where 1 call != 1 permit
     * @return {@code long} amount of nanoseconds you should wait for reserved permissions. if
     * negative, it means you failed to reserve.
     */
    long reservePermission(int permits);

    /**
     * Drains all the permits left in the current period.
     */
    void drainPermissions();

    /**
     * Records a failed call. This method must be invoked when a call failed.
     *
     * @param throwable The throwable which must be recorded
     */
    default void onError(Throwable throwable) {
        drainIfNeeded(Either.left(throwable));
    }

    /**
     * Records a successful call. This method must be invoked when a call was
     * successful.
     */
    default void onSuccess() {
        drainIfNeeded(Either.right(null));
    }

    /**
     * This method must be invoked when a call returned a result
     * and the result predicate should decide if the call was successful or not.
     *
     * @param result The result of the protected function
     */
    default void onResult(Object result) {
        drainIfNeeded(Either.right(result));
    }

    /**
     * Get the name of this RateLimiter
     *
     * @return the name of this RateLimiter
     */
    String getName();

    /**
     * Get the RateLimiterConfig of this RateLimiter.
     *
     * @return the RateLimiterConfig of this RateLimiter
     */
    RateLimiterConfig getRateLimiterConfig();

    /**
     * Returns an unmodifiable map with tags assigned to this RateLimiter.
     *
     * @return the tags assigned to this Retry in an unmodifiable map
     */
    Map<String, String> getTags();

    /**
     * Get the Metrics of this RateLimiter.
     *
     * @return the Metrics of this RateLimiter
     */
    Metrics getMetrics();

    /**
     * Returns an EventPublisher which can be used to register event consumers.
     *
     * @return an EventPublisher
     */
    EventPublisher getEventPublisher();

    /**
     * Decorates and executes the decorated Supplier.
     *
     * @param supplier the original Supplier
     * @param <T>      the type of results supplied by this supplier
     * @return the result of the decorated Supplier.
     */
    default <T> T executeSupplier(Supplier<T> supplier) {
        return executeSupplier(1, supplier);
    }

    /**
     * Decorates and executes the decorated Supplier.
     *
     * @param permits  number of permits that this call requires
     * @param supplier the original Supplier
     * @param <T>      the type of results supplied by this supplier
     * @return the result of the decorated Supplier.
     */
    default <T> T executeSupplier(int permits, Supplier<T> supplier) {
        return decorateSupplier(this, permits, supplier).get();
    }

    /**
     * Decorates and executes the decorated Supplier.
     *
     * @param supplier the original Supplier
     * @param <T>      the type of results supplied by this supplier
     * @return the result of the decorated Supplier.
     */
    default <T> Try<T> executeTrySupplier(Supplier<Try<T>> supplier) {
        return executeTrySupplier(1, supplier);
    }

    /**
     * Decorates and executes the decorated Supplier.
     *
     * @param permits  number of permits that this call requires
     * @param supplier the original Supplier
     * @param <T>      the type of results supplied by this supplier
     * @return the result of the decorated Supplier.
     */
    default <T> Try<T> executeTrySupplier(int permits, Supplier<Try<T>> supplier) {
        return decorateTrySupplier(this, permits, supplier).get();
    }

    /**
     * Decorates and executes the decorated Supplier.
     *
     * @param supplier the original Supplier
     * @param <T>      the type of results supplied by this supplier
     * @return the result of the decorated Supplier.
     */
    default <T> Either<Exception, T> executeEitherSupplier(
        Supplier<Either<? extends Exception, T>> supplier) {
        return executeEitherSupplier(1, supplier);
    }

    /**
     * Decorates and executes the decorated Supplier.
     *
     * @param permits  number of permits that this call requires
     * @param supplier the original Supplier
     * @param <T>      the type of results supplied by this supplier
     * @return the result of the decorated Supplier.
     */
    default <T> Either<Exception, T> executeEitherSupplier(int permits,
        Supplier<Either<? extends Exception, T>> supplier) {
        return decorateEitherSupplier(this, permits, supplier).get();
    }

    /**
     * Decorates and executes the decorated Callable.
     *
     * @param callable the original Callable
     * @param <T>      the result type of callable
     * @return the result of the decorated Callable.
     * @throws Exception if unable to compute a result
     */
    default <T> T executeCallable(Callable<T> callable) throws Exception {
        return executeCallable(1, callable);
    }

    /**
     * Decorates and executes the decorated Callable.
     *
     * @param permits  number of permits that this call requires
     * @param callable the original Callable
     * @param <T>      the result type of callable
     * @return the result of the decorated Callable.
     * @throws Exception if unable to compute a result
     */
    default <T> T executeCallable(int permits, Callable<T> callable) throws Exception {
        return decorateCallable(this, permits, callable).call();
    }

    /**
     * Decorates and executes the decorated Runnable.
     *
     * @param runnable the original Runnable
     */
    default void executeRunnable(Runnable runnable) {
        executeRunnable(1, runnable);
    }

    /**
     * Decorates and executes the decorated Runnable.
     *
     * @param permits  number of permits that this call requires
     * @param runnable the original Runnable
     */
    default void executeRunnable(int permits, Runnable runnable) {
        decorateRunnable(this, permits, runnable).run();
    }

    /**
     * Decorates and executes the decorated Supplier.
     *
     * @param checkedSupplier the original Supplier
     * @param <T>             the type of results supplied by this supplier
     * @return the result of the decorated Supplier.
     * @throws Throwable if something goes wrong applying this function to the given arguments
     */
    default <T> T executeCheckedSupplier(CheckedFunction0<T> checkedSupplier) throws Throwable {
        return executeCheckedSupplier(1, checkedSupplier);
    }

    /**
     * Decorates and executes the decorated Supplier.
     *
     * @param permits         number of permits that this call requires
     * @param checkedSupplier the original Supplier
     * @param <T>             the type of results supplied by this supplier
     * @return the result of the decorated Supplier.
     * @throws Throwable if something goes wrong applying this function to the given arguments
     */
    default <T> T executeCheckedSupplier(int permits, CheckedFunction0<T> checkedSupplier)
        throws Throwable {
        return decorateCheckedSupplier(this, permits, checkedSupplier).apply();
    }

    interface Metrics {

        /**
         * Returns an estimate of the number of threads waiting for permission in this JVM process.
         * <p>This method is typically used for debugging and testing purposes.
         *
         * @return estimate of the number of threads waiting for permission.
         */
        int getNumberOfWaitingThreads();

        /**
         * Estimates count of available permissions. Can be negative if some permissions where
         * reserved.
         * <p>This method is typically used for debugging and testing purposes.
         *
         * @return estimated count of permissions
         */
        int getAvailablePermissions();
    }

    /**
     * An EventPublisher which can be used to register event consumers.
     */
    interface EventPublisher extends io.github.resilience4j.core.EventPublisher<RateLimiterEvent> {

        EventPublisher onSuccess(EventConsumer<RateLimiterOnSuccessEvent> eventConsumer);

        EventPublisher onFailure(EventConsumer<RateLimiterOnFailureEvent> eventConsumer);

    }
}

redpajama_set_name: RedPajamaGithub


text:
Dorothea Bate
Dorothea Minola Alice Bate
Dorothea Bate at Valletta. Malta, 5 April 1934.
8 November 1878[1]
Carmarthen, Wales
13 January 1951[1]
Westcliff-on-Sea, Essex
at home & Natural History Museum, London
Palaeontologist and archaeozoologist
Henry Reginald Bate and Elizabeth Fraser Bate, née Whitehill
Wollaston Fund[2]
Dorothea Minola Alice Bate FGS (8 November 1878 – 13 January 1951), also known as Dorothy Bate, was a British palaeontologist, a pioneer of archaeozoology. Her life's work was to find fossils of recently extinct mammals with a view to understanding how and why giant and dwarf forms evolved.[3]
Born in Carmarthenshire, Bate was the daughter of Police Superintendent Henry Reginald Bate and his wife Elizabeth Fraser Whitehill. She had an older sister and a younger brother.[1] She had little formal education and once commented that her education "was only briefly interrupted by school".[1]
In 1898, at the age of nineteen, Bate got a job at the Natural History Museum in London, sorting bird skins in the Department of Zoology's Bird Room and later preparing fossils.[4] There she remained for fifty years and learned ornithology, palaeontology, geology and anatomy. She was a piece-worker, paid by the number of fossils she prepared.[1]
In 1901 Bate published her first scientific paper, "A short account of a bone cave in the Carboniferous limestone of the Wye valley", which appeared in the Geological Magazine, about bones of small Pleistocene mammals.[1]
The same year, she visited Cyprus, staying for 18 months at her own expense, to search for bones there, finding twelve new deposits in ossiferous caves, among them bones of Hippopotamus minor.[1] In 1902, with the benefit of a hard-won grant from the Royal Society, she discovered in a cave in the Kyrenia hills a new species of dwarf elephant, which she named Elephas cypriotes, later described in a paper for the Royal Society.[5][6] While in Cyprus she also observed (and trapped, shot and skinned[3]) living mammals and birds and prepared a number of other papers, including descriptions of the Cyprus Spiny Mouse (Acomys nesiotes) and a subspecies of the Eurasian Wren (Troglodytes troglodytes cypriotes). In Cyprus, Bate lodged mostly at Paphos with a District Commissioner called Wodehouse.[1] When not travelling in remote areas, often alone, she led an active social life.[6]
She later undertook expeditions to many other Mediterranean islands, including Crete, Corsica, Sardinia, Malta, and the Balearic Islands, publishing work on their prehistoric fauna.[1] In the Balearics in 1909, she discovered Myotragus balearicus, a previously unknown species of the subfamily Caprinae.[1] On the plateau of Kat, in eastern Crete, she found remains of the Cretan dwarf hippopotamus.[7] In Crete, she got to know the archaeologists then excavating Knossos and other sites on the island, who were throwing light on the Minoan civilisation,[3] such as Arthur Evans.
Finding herself sexually harassed by the British Vice-Consul in Majorca, Bate commented: "I do hate old men who try to make love to one and ought not to in their official positions."[8]
According to The Daily Telegraph[3] –
" Her days were spent on foot or mule, traversing barren and bandit-infested terrains and sleeping in flea-ridden hovels and shacks. She would wade through turbulent swells to reach isolated cliff caves where she scuffled about, covered in mud and clay, never without her collecting bag, nets, insect boxes, hammer and – later – dynamite. "
In the 1920s, Bate worked with the archaeologist Professor Dorothy Garrod in Palestine, and in 1937 they published together The Stone Age of Mount Carmel volume 1, part 2: Palaeontology, the Fossil Fauna of the Wady el-Mughara Caves, interpreting the Mount Carmel excavations.[1][9] Among other finds, they reported remains of the hippopotamus.[10]
Bate also worked with Percy R. Lowe on fossil ostriches in China.[1] She was a pioneering archaeozoologist, especially in the field of climatic interpretation.[4] She compared the relative proportions of Gazella and Dama remains.[4]
In the late 1930s, towards the end of her career in field work, Bate found the bones of a giant tortoise in Bethlehem.[3]
Later life, death, legacy
Many archaeologists and anthropologists relied on her expertise in identifying fossil bones, including Louis Leakey, Charles McBurney, and John Desmond Clark.[1]
During the Second World War, Bate transferred from the Natural History Museum's department of geology in London to its zoological branch at Tring, and in 1948, a few months short of her seventieth birthday, she was appointed officer-in-charge there.[1] Although suffering from cancer, she died of a heart attack on 13 January 1951, and as a Christian Scientist was cremated. Her personal papers were destroyed in a house fire shortly after her death.[4] On her desk at Tring was a list of 'Papers to write'. By the last in the list she had written Swan Song.[1]
Her estate at death amounted to £15,369.[11]
In 2005, a 'Dorothea Bate facsimile' was created at the Natural History Museum as part of a project to develop notable gallery characters to patrol its display cases. She is thus among other luminaries including Carl Linnaeus, Mary Anning, and William Smith. They tell stories and anecdotes of their lives and discoveries.[4]
In her biography Discovering Dorothea: the Life of the Pioneering Fossil-Hunter Dorothea Bate, Karolyn Shindler describes Bate as "witty, acerbic, clever and courageous".[4] Shindler is also the author of the biography in the 2004 edition of the Dictionary of National Biography.[1]
A short account of a bone cave in the Carboniferous limestone of the Wye valley, Geological Magazine, new series, 4th decade, 8 (1901), pp. 101–6
Preliminary Note on the Discovery of a Pigmy Elephant in the Pleistocene of Cyprus (1902–1903)[5]
Further Note on the Remains of Elephas cypriotes from a Cave-Deposit in Cyprus (1905)[12]
On Elephant Remains from Crete, with Description of Elephas creticus (1907)[13]
Excavation of a Mousterian rock-shelter at Devil's Tower, Gibraltar (with Dorothy Garrod, L. H. D. Buxton, and G. M. Smith, 1928)[14]
A Note on the Fauna of the Athlit Caves (1932)[15]
The Stone Age of Mount Carmel, volume 1, part 2: Palaeontology, the Fossil Fauna of the Wady el-Mughara Caves (with Professor Dorothy Garrod, 1937)[9]
1940: Wollaston Fund of the Geological Society[2]
1940: Elected fellow of the Geological Society
A watercolour portrait of Bate as a young woman, drawn by her sister, is at the Natural History Museum. In it she wears a black dress trimmed with white lace, and a large pink rose.[1]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Bate, Dorothea Minola Alice (1878–1951), palaeontologist by Karolyn Shindler in Dictionary of National Biography online (accessed 23 November 2007)
1 2 "Wollaston Fund". Award Winners Since 1831. The Geological Society of London. Retrieved 20 May 2014.
1 2 3 4 5 Making no bones about hunting fossils at telegraph.co.uk dated 4 July 2005 (accessed 5 March 2013)
1 2 3 4 5 6 Review by Miles Russell of Discovering Dorothea: the Life of the Pioneering Fossil-Hunter Dorothea Bate by Karolyn Shindler at ucl.ac.uk (accessed 23 November 2007)
1 2 Bate, Dorothy M. A.: Preliminary Note on the Discovery of a Pigmy Elephant in the Pleistocene of Cyprus in Proceedings of the Royal Society of London Vol. 71 (1902–1903), pp. 498–500
1 2 Dorothea Bate, Cyprus work diary 1901–02, 3 volumes, Natural History Museum's earth sciences library, palaeontology MSS
↑ Evans, Arthur: The Early Nilotic, Libyan and Egyptian Relations with Minoan Crete in The Journal of the Royal Anthropological Institute of Great Britain and Ireland Vol. 55, Jul. – Dec. 1925 (Jul. – Dec. 1925), pp. 199–228
↑ Shindler, Karolyn: Discovering Dorothea: the Life of the Pioneering Fossil-Hunter Dorothea Bate (2005)
1 2 D. A. Garrod, D. M. A. Bate, Eds., The Stone Age of Mount Carmel, Volume 1: Excavations at the Wady El-Mughara (Clarendon Press, Oxford, 1937)
↑ On the Occurrence of Hippopotamus in the Iron Age of the Coastal Area of Israel (Tell Qasileh) by Georg Haas in Bulletin of the American Schools of Oriental Research, No. 132 (Dec. 1953), pp. 30–34
↑ Probate, granted 5 April 1951, CGPLA England & Wales
↑ ''Further Note on the Remains of Elephas cypriotes from a Cave-Deposit in Cyprus'' by Dorothea M. A. Bate in Philosophical Transactions of the Royal Society of London, Series B, Containing Papers of a Biological Character, Vol. 197 (1905), pp. 347–360
↑ Bate, D.M.A. 1907. On Elephant Remains from Crete, with Description of Elephas creticus sp.n. Proc. zool. Soc. London. pp. 238–250.
↑ Garrod, D. A. E., Buxton, L. H. D., Elliot Smith, G. & Bate, D. M. A. (1928) Excavation of a Mousterian Rock-shelter at Devil's Tower, Gibraltar in Journal of the Royal Anthropological Institute 58, pp. 91–113
↑ A Note on the Fauna of the Athlit Caves by Dorothea M. A. Bate in The Journal of the Royal Anthropological Institute of Great Britain and Ireland, Vol. 62, Jul. – Dec. 1932 (Jul. – Dec. 1932), pp. 277–279
Shindler, Karolyn: Discovering Dorothea: the Life of the Pioneering Fossil-Hunter Dorothea Bate (London, Harper Collins, 2005, 390pp, 48 black and white plates) ISBN 0-00-257138-2
Miss D. M. A. Bate (Obituary) in Nature, London, 167, pp. 301–302.
Miss Dorothea Bate, obituary in The Times, 23 January 1951
Nicholas, Anna: Goats from a Small Island (London, Summersdale, 2009, 320pp, ISBN 978-1-84024-760-2
BBC Radio 4 programme on Bate, in the Natural History Heroes series.
BNF: cb15612536z (data)
This article is issued from Wikipedia - version of the 8/11/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.


text:
The Wu-Tang effect – innovation in the...
The Wu-Tang effect – innovation in the entertainment industry
BY Mark Cameron ON 10 April 2014 6 min read
Few industries have experienced more disruption from the advancement in digital technology than the entertainment industry. From the moment the peer-to-peer music sharing service Napster came onto the scene in 1999 the writing was on the wall for the existing business models of the music, film and television industries.
They initially resisted the change but are now succumbing to the impact of digital innovation. But not all innovation potentially impacting this industry is purely digital.
Just recently I read about the model that USA based hip-hop band the Wu-Tang Clan are about to try out. They have decided to combat the impact arising from the ability to instantly share music brought about by digital advances by making and releasing just one copy of their new album Once Upon A Time In Shaolin. What on Earth they are thinking? Let's explore.
The story starts with the Wu-Tang Clan commissioning a one-of-a-kind engraved silver-and-nickel box by British-Moroccan artist Yahya. The box will soon encase the one and only copy of the new album the band has been creating in secret for the last two years. One of the members of the band, RZA, recently said, "We're about to put out a piece of art like nobody else has done in the history of music. We're making a single-sale collector's item. This is like somebody having the sceptre of an Egyptian king."
At first sight this appears to be a monumental mistake. Even if they sell the album for a million dollars or even two this still wouldn't match what they made from their earlier album sales. But the true genius is in what they plan to do before the album is sold. The album is going to go on a world tour, focused on around the types of organisations that normally show high profile artworks: museums and galleries. And like the exhibits that normally are the start of the show at these public buildings there will be a price to attend and listen to the 'artwork' – after going through a heavy security screening of course.
Once the album has finished its 'tour' then it will be put up for sale. Assuming the album is not leaked it is likely that youth culture focused brands would be the first in line to buy the album – which is likely fetch millions of dollars. And once it has been purchased the owner is free to do what they want with it. In other words the plan is to create a unique, exclusive and valuable music 'property'.
There are risks to this strategy. As the album's main producer Cilvaringz put it: "One leak of this thing nullifies the entire concept." But it is a bold and courageous experiment in inventing a new way for music to find value. As Cilvaringz said, "I know it sounds crazy, it might totally flop, and we might be completely ridiculed. But the essence and core of our ideas is to inspire creation and originality and debate, and save the music album from dying."
What I like most about the great Wu-Tang experiment is the fact they have clearly spent time thinking about how they can reframe what music is to their customers. It is a fact that music is social and something to be shared. But it is also a source of excitement – a special experience – especially in that moment when you hear a tune that grabs you for the very first time. What Wu-Tang Clan are trying to do is create a lot of 'first times', while also positioning their music as a work of art. They are reengineering the music listener's customer experience.
Will it work? I don't know. But I applaud the band for being brave in the face of an industry confronted with dramatic change. It is encouraging to see radical new ideas being tested in the market. That's true innovation.
Now it's up to the rest of the entertainment industry to step outside of its old world paradigms and take on the challenge to be truly innovative.
BY Mark Cameron ON 10 April 2014
« Separating what's cool from what's useful in emerging tech and digital mediaProfile: Janine Allis, founder of Boost Juice »