text:
Note: You will only see this box once.
We would like to invite you to sign up for the completely free Apples4theteacher.com Newsletter! Join our other 480,975 readers.
Subscribers are automatically registered to receive free teaching resources including lesson plan ideas, printables and more. Stay informed of all our new resources as they're developed...we have some exciting features coming in 2018!
P.S.. To officially become a newsletter subscriber, be sure to confirm your subscription by responding to the email we send you.
We respect your privacy!
Featured Teaching Ideas
Asian-Pacific American Month
Father's Day Short Stories
The Adventures of Pinocchio
- A Chapter Book
Father's Day Short Stories for Kids
Printable Children's Literature
Home > Holidays and Occasions > Father's Day > Kids Short Stories > The Adventures of Pinocchio - Chapter 18
The Adventures of Pinocchio - Chapter 18
Crying as if his heart would break, the Marionette mourned for hours over the length of his nose. No matter how he tried, it would not go through the door. The Fairy showed no pity toward him, as she was trying to teach him a good lesson, so that he would stop telling lies, the worst habit any boy may acquire. But when she saw him, pale with fright and with his eyes half out of his head from terror, she began to feel sorry for him and clapped her hands together. A thousand woodpeckers flew in through the window and settled themselves on Pinocchio's nose. They pecked and pecked so hard at that enormous nose that in a few moments, it was the same size as before.
"How good you are, my Fairy," said Pinocchio, drying his eyes, "and how much I love you!"
"I love you, too," answered the Fairy, "and if you wish to stay with me, you may be my little brother and I'll be your good little sister."
"I should like to stay--but what about my poor father?"
"I have thought of everything. Your father has been sent for and before night he will be here."
"Really?" cried Pinocchio joyfully. "Then, my good Fairy, if you are willing, I should like to go to meet him. I cannot wait to kiss that dear old man, who has suffered so much for my sake."
"Surely; go ahead, but be careful not to lose your way. Take the wood path and you'll surely meet him."
Pinocchio set out, and as soon as he found himself in the wood, he ran like a hare. When he reached the giant oak tree he stopped, for he thought he heard a rustle in the brush. He was right. There stood the Fox and the Cat, the two traveling companions with whom he had eaten at the Inn of the Red Lobster.
"Here comes our dear Pinocchio!" cried the Fox, hugging and kissing him. "How did you happen here?"
"How did you happen here?" repeated the Cat.
"It is a long story," said the Marionette. "Let me tell it to you. The other night, when you left me alone at the Inn, I met the Assassins on the road--"
"The Assassins? Oh, my poor friend! And what did they want?"
"They wanted my gold pieces."
"Rascals!" said the Fox.
"The worst sort of rascals!" added the Cat.
"But I began to run," continued the Marionette, "and they after me, until they overtook me and hanged me to the limb of that oak."
Pinocchio pointed to the giant oak near by.
"Could anything be worse?" said the Fox.
"What an awful world to live in! Where shall we find a safe place for gentlemen like ourselves?"
As the Fox talked thus, Pinocchio noticed that the Cat carried his right paw in a sling.
"What happened to your paw?" he asked.
The Cat tried to answer, but he became so terribly twisted in his speech that the Fox had to help him out.
"My friend is too modest to answer. I'll answer for him. About an hour ago, we met an old wolf on the road. He was half starved and begged for help. Having nothing to give him, what do you think my friend did out of the kindness of his heart? With his teeth, he bit off the paw of his front foot and threw it at that poor beast, so that he might have something to eat."
As he spoke, the Fox wiped off a tear.
Pinocchio, almost in tears himself, whispered in the Cat's ear:
"If all the cats were like you, how lucky the mice would be!"
"And what are you doing here?" the Fox asked the Marionette.
"I am waiting for my father, who will be here at any moment now."
"And your gold pieces?"
"I still have them in my pocket, except one which I spent at the Inn of the Red Lobster."
"To think that those four gold pieces might become two thousand tomorrow. Why don't you listen to me? Why don't you sow them in the Field of Wonders?"
"Today it is impossible. I'll go with you some other time."
"Another day will be too late," said the Fox.
"Because that field has been bought by a very rich man, and today is the last day that it will be open to the public."
"How far is this Field of Wonders?"
"Only two miles away. Will you come with us? We'll be there in half an hour. You can sow the money, and, after a few minutes, you will gather your two thousand coins and return home rich. Are you coming?"
Pinocchio hesitated a moment before answering, for he remembered the good Fairy, old Geppetto, and the advice of the Talking Cricket. Then he ended by doing what all boys do, when they have no heart and little brain. He shrugged his shoulders and said to the Fox and the Cat:
"Let us go! I am with you."
And they went.
They walked and walked for a half a day at least and at last they came to the town called the City of Simple Simons. As soon as they entered the town, Pinocchio noticed that all the streets were filled with hairless dogs, yawning from hunger; with sheared sheep, trembling with cold; with combless chickens, begging for a grain of wheat; with large butterflies, unable to use their wings because they had sold all their lovely colors; with tailless peacocks, ashamed to show themselves; and with bedraggled pheasants, scuttling away hurriedly, grieving for their bright feathers of gold and silver, lost to them forever.
Through this crowd of paupers and beggars, a beautiful coach passed now and again. Within it sat either a Fox, a Hawk, or a Vulture.
"Where is the Field of Wonders?" asked Pinocchio, growing tired of waiting.
"Be patient. It is only a few more steps away."
They passed through the city and, just outside the walls, they stepped into a lonely field, which looked more or less like any other field.
"Here we are," said the Fox to the Marionette. "Dig a hole here and put the gold pieces into it."
The Marionette obeyed. He dug the hole, put the four gold pieces into it, and covered them up very carefully. "Now," said the Fox, "go to that near-by brook, bring back a pail full of water, and sprinkle it over the spot."
Pinocchio followed the directions closely, but, as he had no pail, he pulled off his shoe, filled it with water, and sprinkled the earth which covered the gold. Then he asked:
"Anything else?"
"Nothing else," answered the Fox. "Now we can go. Return here within twenty minutes and you will find the vine grown and the branches filled with gold pieces."
Pinocchio, beside himself with joy, thanked the Fox and the Cat many times and promised them each a beautiful gift.
"We don't want any of your gifts," answered the two rogues. "It is enough for us that we have helped you to become rich with little or no trouble. For this we are as happy as kings."
They said good-by to Pinocchio and, wishing him good luck, went on their way.
This story comes from The Adventures of Pinocchio, by C. Collodi [Pseudonym of Carlo Lorenzini]
Translated from the Italian by Carol Della Chiesa
Father's Day Games & Activities
Fathers Day Activities
About Fathers Day
When is Father's Day 2019?
Fathers Day Coloring pages
Kids books - Thematic Reading List
Fathers Day Crafts
Father's Day Craft Books
Printable Short Story - The Adventures of Pinocchio
Fathers Day Recipes
Printable Fathers Day Poems
Things to Do With Dad Word Search
Fathers Day Memory Match Game
Fathers Day Coupon Book
Holidays and
Teaching Themes
April Teaching Activities & Worksheets
- Palm Sunday
- Tax Day
- Good Friday
- Passover
- Easter - Religious Christian Easter
- Easter Fun
- Earth Day
- Easter Monday
- Other April Teaching Ideas
May Teaching Activities & Worksheets
- Asian American and Pacific Islander Heritage Month
- May Day
- National Day of Prayer
- Bird Day
- Cinco de mayo
- Teacher Appreciation
- Mother's Day
- Armed Forces Day
- Memorial Day
- Other May Teaching Ideas
Sample Thematic Activities & Teaching Ideas
- Letters of the Alphabet Games
- Community Helpers
- The 100th day of School Activities
- Summer
- Fall
- Winter
- Spring
- Presidents
- Read Across America - Dr. Seuss' Birthday
- Native American Study
- U.S. Geography


text:
Home > Vol 101, No 10 (2011) >	Ellis
a sensory.html
MEDICINE AND THE ENVIRONMENT
A sensory garden
C Ellis
Town Hill Psychiatric Hospital in Pietermaritzburg was built in the late 1870s and opened in 1880. It was designed and built in the grand fashion of Victorian mental institutions; most of its buildings are now listed historical monuments as examples of Victorian colonial architecture. At the beginning of the 20th century, it was almost a self-sufficient community, with vegetable gardens, a piggery, quarry and permanent residences for many of the staff, gardeners and workmen. The first medical superintendent, Dr James Hyslop, planted the trees, many of which still remain and must be up to 100 years old. There are groves of bamboo, yellowwood, cycads, enormous azaleas and avenues lined with jacaranda and London planes in the grounds, which give it the atmosphere of an English country estate in a condition of mild decaying colonial splendour.
In 2009, we decided to design and plant a sensory garden in a spare patch of ground outside Peacehaven ward, which houses long-term female patients and some younger patients who are awaiting placement in the community. Sensory or therapeutic gardens are used to provide a healing and nutritional environment for patients, staff and visitors. The garden consists of exotic and indigenous shrubs and herbs that are visually pleasing to the eye and stimulating to the senses of smell, touch and taste. It provides a relaxing atmosphere and therapy in the form of gardening, watering and empowerment activities for patients. Obviously, poisonous or toxic plants are avoided, as well as shrubs with thorns.
We collected our shrubs and plants from local nurseries and had an opening ceremony where shrubs were planted by individual patients. We also put up a bird bath and bird feeder. The garden is kept by the patients and a sense of ownership is encouraged by keeping the bird bath full, feeding the birds and watering the plants. Shrubs were selected that are fragrant or have medicinal or therapeutic properties, and also some that attract butterflies and birds.
The indigenous medicinal shrubs include African Wormwood (Artemisia afra) which is a popular local shrub and is known in isiZulu as mhlonyane and recognised for its use against coughs and colds and drunk as a tea or used as an inhalation. Its leaves have a disinfectant camphor-like smell and can be put in socks for the treatment of sweaty feet (but remember to take them out before putting them in the washing machine).
At the entrance of the garden is a wild African sage (Orthosiphon labiatus), which comes out in profuse pink long-stemmed flowers in the summer; the crushed leaves have a rich herby smell. Behind this is a Sacred Basil plant known to Indians as Tulsi; this has pungent aromatic leaves that smell a bit like Vicks ointment. It is cultivated both for Hindu religious purposes as well as for use in Ayurvedic medicine, and can also be hung over doorways as a protective talisman.
On the other side of the garden is a young South African jasmine (Jasminum angulare) which is indigenous to KwaZulu-Natal and has an exquisite fragrance throughout the summer. At the side is a small tree with very pungent aromatic leaves. In Afrikaans it is called perdepisboom but it has the more elegant name of Horsewood (Clausena anisata) in English. It is a natural habitat for the Swallowtail butterfly. There is also the Natal ginger bush, known in isiZulu as iboza, which was donated to us by the botany department of the university, and is also known as the misty plume bush; it is one of the few shrubs that flower during the winter months. The aromatic leaves are crushed and the scent is inhaled for the treatment of chest complaints and headaches.
The shrub we planted to attract birds is called Lion's Tail (Leonotis leonurus) which, in isiZulu, goes by the appropriate name of utshwala bezinyoni, which translated means 'the beer of the birds'. A Buddleia bush at the back attracts butterflies, and a lemon verbena produces fragrant leaves that can be used in summer drinks. The signs and labels for the plants and bushes were made by the patients in the Occupational Therapy Unit, which is very active at Town Hill.
It is interesting to see the eyes of the patients and staff light up when they recognise the smells of the herbs from the crushed leaves. This is known as 'bright eyes' therapy used by occupational health workers to aid in connecting with patients with intermediate and advanced dementia. It is a sort of Proustian nostalgic journey, à la recherche du temps perdu [Remembrance of things past].
We still don't understand all the sensory pathways of taste and smell. There appears to be some crossover, as the sensations that we consider being taste can actually be conveyed by smell, and vice versa. Smell is also tied up (via the limbic system) with memory, and hence the nostalgia induced by certain smells. Emotion is also enmeshed with this system, so that events, places or people who are emotionally significant, are likely to be remembered. These are ancient primaeval pathways that began to evolve in our forebears' forebears over 400 million years ago (Homo sapiens does not seem to be in a hurry over these matters).
Patients may also use the herbs from the culinary section, such as parsley, basil, mint and thyme, to spice up their normal diets. We plan to map out trails so that patients and staff from the other wards can visit as part of therapeutic exercises. This is all part of a strategy to create a healing, natural environment to aid the recovery of our patients.
Chris Ellis is a family physician and part-time principal medical officer at Town Hill Hospital, Pietermaritzburg.
Corresponding author: C Ellis (cristobalellis@gmail.com)

redpajama_set_name: RedPajamaCommonCrawl


A National Historic Landmark, Meadow Brook Hall is the historic home of one of the automotive aristocracy's most remarkable women, Matilda Dodge Wilson, her second husband Alfred Wilson, a lumber broker and their four children, Frances and Danny Dodge, and Richard and Barbara Wilson. It exists as an indirect product of the achievements and good fortune of her first husband, automotive pioneer John F. Dodge, co-founder of Dodge Brothers Motor Car Company who quickly prospered in the burgeoning auto industry before his tragic death in 1920, leaving Matilda one of the world's wealthiest women. This fortune not only built one of America's finest residences and country estates, it also supported numerous Detroit charities and organizations, and made possible the founding of Oakland University.
One of America's greatest estate homes, an icon of the automotive aristocracy, and the home of the founders of Oakland University.
Meadow Brook Hall was built during the country place era, a time when wealthy American industrialists pursued rural life in settings of great beauty. It represents one of the finest examples of Tudor-revival architecture in America and is especially renowned for its superb craftsmanship, architectural detailing and grand scale of 88,000 square feet. Inspired by the country manor homes in England, it was designed and built by the Detroit architectural firm of Smith, Hinchman and Grylls between 1926 and1929, at a cost of nearly $4 million.
Carefully preserved with original family furnishings and art, the 110-room mansion is elaborately detailed with carved wood and stone, ornate plaster ceilings, Tiffany stained glass, custom made hardware, and filled with fine and decorative art. Although the interiors reflect various historic styles, the house is equipped with every "modern" amenity appropriate to the active lifestyle of the Wilson's and their children.
Meadow Brook Hall history begins with the 320-acre farm estate John and Matilda Dodge had purchased years earlier as weekend country retreat. The Wilsons' expanded the estate to include 1,500 acres and several residences. For the Dodge and Wilson families, the farm estate provided a splendid setting for recreational activities and pastimes such as equestrian sports, motoring, and gardening and developed into one of the finest agricultural complexes, producing the finest lines of pedigree livestock.
Alfred and Matilda toured the great homes of England on their honeymoon and began planning Meadow Brook Hall, a 110-room, 88,000-square-foot, Tudor-revival style home. They commissioned the Detroit architectural firm of Smith, Hinchman & Grylls to design and build the hall at Meadow Brook Farm, the family's country retreat that Dodge had purchased. Groundbreaking ceremonies for the hall were held on Matilda's 43rd birthday on Oct. 19, 1926.
In 1927, the Wilsons went on a second architectural tour of England accompanied by their architect. Many of the architectural details of the hall are based on specific examples of historic rooms they viewed on their trips to England. Although much of the home is inspired by English manor houses of the 16th, 17th and 18th centuries, Matilda was proud of the fact that the hall was made, to a large extent, of American materials and crafted by Americans. Unlike many wealthy American families of the day, the Wilsons did not import entire rooms of paneling and furniture overseas.
Meadow Brook Hall was completed in 1929 at a cost of nearly $4 million. The housewarming party, attended by 850 people, was held Nov. 19, 1929, just three weeks after the stock market crash that started the Great Depression.
Meadow Brook Hall is especially renowned for its fine craftsmanship, exquisite architectural detailing and grand scale. The architecture is the embodiment of enduring quality in both its design and use of fine construction materials.
The exterior combines various textures and patterns using American materials of brick, sandstone, wood timbers and a roof of clay shingle tile. The house also features 39 uniquely designed brick chimneys that distinguish the picturesque roofline.
Interiors of the house are elaborately detailed with carved wood and stone, handmade hardware and ceramic art tile, ornately molded and carved plaster ceilings, stained glass window insets, crystal and art glass lighting fixtures, and gold-plated bathroom fittings. And while the interiors reflect various historic styles, the house is equipped with every modern amenity available in the late 1920s. It was fully electric with a central heating system, two elevators, three kitchens and a full size home theatre.
The exterior and most of the interior rooms at Meadow Brook Hall were designed in the Tudor-revival style. However, a few rooms were decorated in other period-revival styles: the dining room and Matilda's study are 18th-century Neo-classical, Matilda's room and the French bedroom are 18th-century French Rococo, and Frances' bedroom is American Colonial.
Matilda spent most of her lifetime filling Meadow Brook Hall with beautiful furniture, paintings and decorative art from across several centuries and around the world. This magnificent home carefully preserved with original furnishings and art, beautifully exemplifies the lavish lifestyles and era of the American industrialists of the early 20th century.
The Hall's collections include original paintings, sculptures, prints and drawings, furniture, ceramics, carpets, glass, silver, costumes and other textiles, and family archival materials. Highlights of the collection include Tiffany art glass, costumes by Paul Poiret, Stickley furniture, paintings by Sir Joshua Reynolds, Sèvres and Meissen porcelain, and Rookwood pottery.
Excluding a period of time during the Depression, and then in Alfred's later years, Matilda lived in The Hall from the time it was built in 1929 until her death in 1967. She did close The Hall for a few years during the Depression, partly for appearances and partly for financial reasons because maintaining a home of this size during that time was difficult.
Throughout the 38 years the Wilsons lived at Meadow Brook Hall, they hosted many family and social gatherings and took great pride in sharing this architectural masterpiece, its grounds, art and furnishings with guests.
Parties to remember include Frances Dodge's wedding in 1938, her 25th birthday party in 1939 where the entertainment included the Tommy Dorsey band and singer Frank Sinatra, Barbara Wilson's coming out party in 1950, and the largest gathering of Oakland University students, faculty and alumni in 1963 for Matilda's 80th birthday.
In 1957, the Wilsons donated their residence, its collections, the estate's 1,500 acres and $2 million to found what would become Oakland University. Meadow Brook Hall was opened to the public in 1971, four years after Matilda's death.
Matilda, a long-time preservationist and member of the Historic Memorials Society, understood the significance of the property as both a testament to an important family and as a grand piece of architecture filled with beautiful and historically significant fine and decorative art. She felt strongly that history, art and architecture should be shared with future generations. "Knowledge of the past helps people face the challenges of the future," she once said. Matilda also understood that it is through the preservation of properties like Meadow Brook Hall that future generations will have the opportunity to be inspired and educated by their history.
Currently, The Hall welcomes more than 70,000 visitors each year to participate in tours, educational programs and a variety of special events. This historic house museum also provides a sense of tradition for Oakland University and is a research, scholarship and training resource for students and faculty.
A National Historic Landmark, Meadow Brook Hall strives to preserve and interpret its architecture, landscape, and fine and decorative art so that visitors may be entertained, educated and inspired by history.
To learn more about Meadow Brook Hall history or schedule a tour, call (248) 364-6200 or complete our contact form.


text:
Koinos
Indian Arbitration Blog
The Koinos Drafting Table (KDT) is an effort to cover the various issues one may come across while drafting an arbitration clause. It is an extension of the author's webinar session on arbitration law.
The KDT is a working and non-exhaustive document; it will be modified from time to time.
It is primarily focused on arbitrations involving at least one Indian party.
Comments and suggestions are welcome, do feel free to share them at rmkulkarni.ils@gmail.com.
Like all other content on the blog, nothing in the KDT should not be construed as legal advice.
Component Particulars Source Points to check and consider
Written and unambiguous agreement While oral agreements may be enforceable under the Indian Contract Act 1872, oral arbitration agreements are not enforceable under to the Arbitration Act. Section 7(3) of the Arbitration Act The agreement has to be unambiguous. If an arbitration clause says that the parties may choose to refer to arbitration if they so agree at the time of a dispute, such an arbitration clause is unlikely to be enforced [See, Jagdish Chander v Ramesh Chander[1]]
[Also see Municipal Corporation of Greater Mumbai & Anr. v. Pratibha Industries Ltd, Supreme Court]
This judgment is discussed here on Koinos.
Form of an arbitration agreement Arbitration clause in a contract Separate arbitration agreement Incorporate by reference [See, MR Engineers v Somm Datt Builders (2009) and Duro Fulguera v. Gangavaram Port[2] (2017)] Exchange of correspondence (See, Trimex International v. Vedanta Aluminum[3]) Section 7(1) and (2) of the Arbitration Act Stamp duty on the main contract
Where the arbitration clause forms part of a contract, it is crucial to ensure that the contract is stamped in accordance with applicable law. (See, Garware Wallropes v Coastal Marine[4])
Otherwise, courts will not act on such an arbitration to appoint an arbitrator.
One way to avoid this predicament may be to enter into a separate or standalone agreement providing for parties to resolve their disputes to arbitration.
This is not to suggest, in any manner, that parties can or should avoid payment of stamp duty. It is only to make the arbitral process as seamless as possible.
If the underlying contract(s) is insufficiently stamped, the arbitration will eventually not be able to proceed effectively unless all applicable duty and penalty are paid.
Scope of disputes Parties' underlying agreements often deal with various obligations.
Parties are free to agree on whether they would like to refer any and all disputes to arbitration; or restrict the scope of arbitral determination to only certain disputes arising out of the contract. See, e.g. Section 34(2)(a)(iv)[5] of the Arbitration Act Specified disputes
For instance, insurance contracts often provide that only disputes relating to the quantum to be paid under the policy (liability being otherwise admitted) will be referred to arbitration. [See, United India Insurance vs Hyundai Engineering[6]]
Broad umbrella [See, Chloro Controls v Severn Trent Water Purification[7]]
Consolidated references on account of a broad clause and composite transaction(s) [See, Ameet Lalchand v Rishabh Enterprises[8]
Per contra: Duro Fulguera v. Gangavaram PortSukanya Holdings v. Jayesh H. Pandya[9]]
Asymmetrical arbitration clauses Parties often agree that in case of a dispute under the contract, only one of the parties will be entitled to choose whether the dispute should be referred to arbitration or submitted to a court having jurisdiction. This is prevalent in financing transactions. Refused enforcement by Delhi High Court in Union of India vs Bharat Engineering Corporation[10].
Previously held enforceable by the Calcutta HC in New India Assurance Co Ltd v Central Bank of India & Ors.[11] The Supreme Court's rationale in Perkins may be extrapolated to argue against any unilateral control over the dispute resolution process; in which case, asymmetrical arbitration may be held to be invalid.
It would be interesting to see how the Supreme Court deals with this matter.
Multi-tiered reference or escalation mechanism Parties are free to agree that in case of a dispute, they should comply with certain conditions before the aggrieved party can formally refer the dispute to arbitration.
The most common requirement is for parties to wait for a specified period (30/60 days) for attempting amicable settlement.
Multi-tiered mechanism
In some transactions, especially in infrastructure and government contracts, the contractor is required to follow an escalation mechanism.
If there is a dispute, the contractor is required to approach a designated officer of the client/employer for her decision.
If the dispute remains fully or partially unresolved, the contractor must approach a senior officer for her decision.
If the contractor remains not satisfied, then she can write to the Managing Director expressing the contractor's intent to submit the dispute to arbitration.
Each of these stages may have deadlines.
The enforceability of these provisions, especially in Section 11 applications, remain uncertain. Suarabh Bindal and Gunjal Chhabra have analyzed this issue at length here on the SCC blog. In many cases, the invoking party may take the position that the parties' differences have, in its view, become irreconcilable. In such cases, it would be possible to argue that attempting negotiation would, therefore, be a futile exercise.
The court should exercise its jurisdiction to appoint an arbitrator under Section 11 of the Arbitration Act.
Arbitrability Under Indian law, certain disputes are not permitted to be resolved by arbitration. This mainly includes transactions that involve or affect rights in-rem or otherwise affect the public at large.
While drafting an arbitration clause, it would be prudent to check whether the dispute in question is capable of arbitration. Booz Allen & Hamilton Inc. v. SBI Home Finance Ltd.[12] (Supreme court's landmark decision on arbitrability) Disputes which have been held to be non-arbitrable
Relationship of tenancy Himangni Enterprises vs Kamaljeet Singh Ahluwalia[13] Vidya Drolia vs Durga Trading Corporation[14]
Relationship of trust (under the Indian Trust Act 1882) Shri Vimal Kishor Shah & Ors. Vs. Mr. Jayesh Dinesh Shah & Ors.[15]
Serious fraud Avitel Post Studioz Ltd. v. HSBC PI Holdings[16]
Oppression and mismanagement (under the Companies Act 2013)
Rakesh Malhotra v. Rajinder Malhotra[17]
Disputes held to be arbitrable
Contractual disputes involving intellectual property: Eros International v. Telemax Links India Pvt. Ltd.[18]
Governing law of the contract Parties may choose any legal system to govern the substance of their transaction. A dispute between two or more Indian parties is mandatorily required to be governed by Indian law.
In an international arbitration, parties can choose any legal system to govern their contract. Parties commonly agree to be governed by the laws of England, Singapore, and Switzerland.
Parties also often agree to certain additional frameworks, such as the 1980 United Nations Convention on Contracts for the International Sale of Goods (CISG) in contracts for sale of goods. Section 28 of the Arbitration Act
Where the place of arbitration is in India:
In a domestic arbitration the arbitral tribunal shall decide the dispute submitted to arbitration in accordance with the substantive law for the time being in force in India.
In an international arbitration:
the arbitral tribunal shall decide the dispute in accordance with the rules of law designated by the parties as applicable to the substance of the dispute; any designation by the parties of the law or legal system of a given country shall be construed, unless otherwise expressed, as directly referring to the substantive law of that country and not to its conflict of laws rules;
No law designated
Failing any designation of the law under by the parties, the arbitral tribunal shall apply the rules of law it considers to be appropriate given all the circumstances surrounding the dispute
No express designation, closest connection
Where, however, the intention of the parties is not expressly stated and no inference about it can be drawn, their intention as such has no relevance. In that even, the courts endeavour to impute an intention by identifying the legal system with which the transaction has its closest and most real connection. [See, NTPC v Singer Company[19]]
Seat of arbitration Arbitration proceedings do not have a natural domicile or situs. Parties are free to choose a geographical location to which their arbitral proceedings will be 'juridically' anchored.
Once the parties decide a 'seat/place', the curial law of arbitration of such place will supervise and govern the arbitration proceedings.
Additionally, courts at that location will have jurisdiction over the arbitral proceedings.
Depending on the nature of arbitration and parties' agreement, such court may have exclusive jurisdiction over the arbitral proceedings – regardless of where parties reside/carry on business or the cause of action has arisen. Section 2(2) of the Arbitration Act (Part I shall apply where the place of arbitration is in India) Section 20(1) of the Arbitration Act (Parties are free to agree on a place of arbitration) Exclusive jurisdiction of courts
An express designation of a "venue", and no designation of any alternative place as the "seat", combined with a supranational body of rules governing the arbitration, and no other significant contrary indicia, the inexorable conclusion is that the stated venue is actually the juridical seat of the arbitral proceeding
[See, BGS SGS SOMA v. NHPC[20]]
[See also: (Application under Section 11) Mankatsu Impex v Airvisual[21]
(Irrelevance of 'seat' in domestic arbitration) Quippo Construction Equipment vs. Janardan Nirman[22]]
Unilateral right to choose seat
Parties cannot agree that the seat of arbitration will be Place 'A' or any other place chosen at the sole discretion of one of the parties.
L&T Finance v. Manoj Pathak[23] (Bombay HC)
Venue of arbitration In addition to the juridical seat or place of arbitration, parties are also free to choose a location they would find convenient to physically hold the arbitration proceedings.
Ideally, the venue should be located within the territorial limits of the seat/place. Otherwise, it would create an anomalous situation – e.g. when the 'seat' is India and the 'venue' is London. Section 20(3) of the Arbitration Act Designation of rules of an institution headquartered outside the chosen venue.
Even though 'venue' is not synonymous with 'seat', in an arbitration clause which provided for arbitration to be conducted in accordance with the Rules of the ICC in Paris (a supranational body of rules), a provision that 'the venue of arbitration shall be London, United Kingdom' did amount to the designation of a juridical seat of such arbitration. Roger Shashoua & Ors. v. Mukesh Sharma [2009] EWHC 957 (Comm) (affirmed by the Indian Supreme Court in BALCO and BGS Soma)
Law governing the substance of the arbitration In addition to the substantial law governing their main contract, parties can also agree to the substantial law the arbitration agreement and proceedings.
However, the law of the arbitration proceedings would essentially be dictated by the laws of the seat of arbitration chosen by the parties.
For instance, if the arbitration is seated in India – Part I of the Arbitration Act will necessarily apply. If the arbitration is seated in London, then the UK Arbitration Act 1996 should apply.
For an arbitration seated in London, it would be anomalous for parties to agree that the arbitration will be governed by the Indian Arbitration Act. Section 2(2) of the Arbitration Act If India (or an Indian city) is the seat of arbitration, then the Arbitration and Conciliation Act 1996 must apply. Enforcement of an unworkable arbitration clause [See, Enercon (India) v Enercon GmBH[24]]
Law or rules governing the procedure of the arbitral proceedings. Parties can also choose the rules that govern the conduct of the arbitral proceedings. Section 19(2) of the Arbitration Act [Subject to Part I, the parties are free to agree on the procedure to be followed by the arbitral tribunal in conducting its proceedings] Mandatory provisions, such as Section 18, will continue to apply. Parties should ensure that their choice for the rules of arbitration are consistent with the arbitral institution chosen by them.
For instance, one should avoid a clause providing for the arbitration to be administered by the MCIA in accordance with the SIAC Arbitration Rules.
Institutional arbitration Parties are free to choose whether their arbitration will be administered by an institution or in an ad-hoc manner.
Based in India
Mumbai Centre for International Arbitration (MCIA)
Based outside India
SIAC – Singapore International Arbitration Centre
LCIA – The London Court of International Arbitration (LCIA)
DIAC – Dubai International Arbitration Centre
ICC – International Chamber of Commerce
HKIAC – Hong Kong International Arbitration Centre
DIS – German Arbitration Institute
SCMA – Singapore Chamber of Maritime Arbitration
LMAA – London Maritime Arbitrators Association
Most institutions also provide a model arbitration clause suited to their rules of arbitration.
See e.g., Section 2(6) of the Arbitration Act (Where Part I, except section 28, leaves the parties free to determine a certain issue, that freedom shall include the right of the parties to authorise any person including an institution, to determine that issue) Ad-hoc vs. Institutional
Ad-hoc arbitration is better for smaller claims.
Institutional arbitration, on the other hand, is systematic and comparatively more efficient; but can be quite expensive.
The Mumbai Centre for International Arbitration (MCIA) has set out here its views on why institutional arbitration is more beneficial than its ad-hoc counterpart.
Reference to a non-existing institution
Curiously, there are times when parties agree to administer their arbitration in accordance with the rules of an which does not exist (e.g. Mumbai International Arbitration Court, Singapore Court of Arbitration, etc)
Needless to say, it would be prudent to verify the existence of an institution at the time of drafting the arbitration clause.
In Glencore International AG v Indian Potash Limited (Ex. P. 99/2015, order dated 9 August 2019), the award-debtor resisted enforcement of a foreign award on grounds that the arbitration was administered by SIAC when the parties' agreement had referred to the 'Singapore International Arbitration of the Chambers of Commerce in Singapore'.
The Delhi High Court upheld the award and held that the SIAC Registrar had correctly assumed jurisdiction over the arbitration.
Number of arbitrators Parties are free to agree on the number of arbitrators, ideally between 1 and 3 persons – but not an even number. Section 10 of the Arbitration Act [(1) The parties are free to determine the number of arbitrators, provided that such number shall not be an even number. (2) Failing the determination referred to in sub-section (1), the arbitral tribunal shall consist of a sole arbitrator] Choice of even number of arbitrators and waiver
Under an application under Section 34, the challenging party argued that the award should be set aside since the arbitration was conducted by two arbitrators.
Given that Section 10 specifically and mandatorily bars the parties' choice of an even number of arbitrators, it was argued that the arbitration under challenge would be void and invalid.
The Supreme Court observed as follows: '[…] The question still remains whether Section 10 is a non-derogable provision. In our view the answer to this question would depend on the question as to whether, under the said Act, a party has a right to object to the composition of the Arbitral Tribunal, if such composition is not in accordance with the said Act, and if so, at what stage. It must be remembered that arbitration is a creature of an agreement. There can be no arbitration unless there is an arbitration agreement in writing between the parties.
A conjoint reading of Sections 10 and 16 shows that an objection to the composition of the Arbitral Tribunal is a matter which is derogable. It is derogable because a party is free not to object within the time prescribed in Section 16(2). If a party chooses not to so object there will be a deemed waiver under Section 4[25].
Arbitrator's qualifications and eligibility Parties can agree that the arbitrator(s) must be specialist in a certain discipline. They may require an arbitrator to hold certain educational or professional qualifications, e.g. in engineering or accounting. Section 11(8)(a) of the Arbitration (while appointing an arbitrator, the court is required to duly consider the qualifications required for the arbitrator by the agreement of the parties). Section 12(3)(b) (appointment of an arbitrator can be challenged if he does not possess the qualifications agreed to by the parties) Watch out for the 2019 Amendments
The newly added Eighth Schedule sets out certain mandatory requirements in respect of the arbitrator's qualifications and experience.
For instance, parties cannot appoint a person who is not an advocate within the meaning of the Advocates Act, 1961 having ten years of practice experience as an advocate. There are similar restrictions on persons from other professions.
Some of these requirements are onerous – and may be held to be unconstitutional in the future.
Manner of appointing arbitrators Parties are free to choose a procedure for appointing the arbitrator(s). Some variants are: Sole arbitrator agreed to by all parties to the agreement; If the parties don't or cannot agree to a sole arbitrator, then each party will appoint one arbitrator. These two arbitrators will then appoint a third (presiding) arbitrator. One of the parties will choose one or three arbitrators from a pool/panel of several prospective arbitrators. Section 11(2) of the Arbitration Act. Parties agreement will always be subject to other statutory requirements, such as under Section 12(5) and 12(7) of the Arbitration Act. Unilateral appointment
One party to the agreement cannot have the right to appoint the arbitrator.
[See, Perkins Eastman Architects DPC and another v. HSCC (India) Limited[26]]
Parties often agree, especially in government contracts, that one of the parties will be entitled to choose one or more arbitrators from a pool or panel of persons who are retired or serving officers of the other party, ie the government entity in question. In Central Organisation For Railway Electrification vs ECI SPIC SMO MCML (JV)[27], the Supreme Court observed the following: Thus, the right of the General Manager in formation of Arbitral Tribunal is counterbalanced by respondent's power to choose any two from out of the four names and the General Manager shall appoint at least one out of them as the contractor's nominee.
See also, Voestalpine Schienen Gmbh v. Delhi Metro Rail Corporation[28]
Institutional arbitration
Arbitration rules of most institutions have a mechanism and preconditions for appointing arbitrator(s).
Here, parties need not agree to a procedure of appointment.
While parties remain free to agree to a sole arbitrator or nominate their respective arbitrators, institutional rules would also provide that no appointment will be made unless the nominee arbitrator(s) are also compliant with the institution's requirements.
Exclusive jurisdiction of courts Parties are free to agree that any one court will have exclusive jurisdiction over court matters arising out of their contract [See, Indus Mobile Distribution Private Limited vs Datawind Innovations[29]]
Injunctive reliefs In international arbitration seated outside India, parties can agree to exclude Section 9. Section 2(2) of the Arbitration Act (Provided that subject to an agreement to the contrary, the provisions of sections 9, 27 and clause (a) of sub-section (1) and sub-section (3) of section 37 shall also apply to international commercial arbitration, even if the place of arbitration is outside India, and an arbitral award made or to be made in such place is enforceable and recognised under the provisions of Part II of this Act.) Effect of referring to institutional rules
Reference to institutional rules does not by itself mean that parties have excluded Sections 9.
[See, Raffles Design v Educomp Professional[30]] (Raffles)
[See also, Mr. Ashwani Minda & Anr. v. U-Shin Ltd. & Anr., where Raffles was distinguished by the Delhi High Court.
Soft laws Parties can agree to other procedural matters, such as application of the rules of evidence. e.g. IBA Rules on the Taking of Evidence in International arbitration Sections 18 and 19 in ad-hoc. Institutional arbitration Institutional rules also generally provide that arbitrators can choose the applicable rules of evidence etc. See, Arbitration Materials on Koinos.
[1] (2007) 5 SCC 719
[3] 2010 (3) SCC 1
[4] 2019 SCC OnLine SC 515
[5] (iv) the arbitral award deals with a dispute not contemplated by or not falling within the terms of the submission to arbitration, or it contains decisions on matters beyond the scope of the submission to arbitration: Provided that, if the decisions on matters submitted to arbitration can be separated from those not so submitted, only that part of the arbitral award which contains decisions on matters not submitted to arbitration may be set aside
[6] CA No. 8146 OF 2018 (Supreme Court)
[10] ILR 1977 Delhi 57
[11] AIR 1985 Cal 76
[12] (2011) 5 SCC 532
[13] CA 16850 OF 2017 (Supreme Court)
[14] CA NO.2402 OF 2019 (Supreme Court)
[15] CA No. 8164 OF 2016 (Supreme Court)
[17] MANU/MH/1309/2014
[18] Notice of Motion NO. 886 OF 2013, Bombay High Court
[19] 1993 AIR 998 | (1992) 3 SCC 551
[20] CA No. 9307 of 2019
[21] Arbitration Petition No. 32 of 2018, Supreme Court
[23] Com. Arb. Pet. No. 1315 of 2019, on 31 Jan 2020
[24](2014) 5 SCC 1
[25] Section 4, Arbitration Act. Waiver of right to object.—
A party who knows that—
(a) any provision of this Part from which the parties may derogate, or
(b) any requirement under the arbitration agreement,
has not been complied with and yet proceeds with the arbitration without stating his objection to such non-compliance without undue delay or, if a time limit is provided for stating that objection, within that period of time, shall be deemed to have waived his right to so object.
[26] (2019) SCC Online SC 1517
[27] CA 9486 of 2019 (Supreme Court)
[30] MANU/DE/2754/2016
#staysafefromcovid19
https://youtu.be/bPITHEiFWLc
Extend your support to India's legal leaders of tomorrow.
Ritvik M. Kulkarni
Seat v Venue of Arbitration: A Quest for Clarity (Part II)
Seat v Venue of Arbitration: A Quest for Clarity (Part I)
Avitel v HSBC: Finally a Uniform Standard on Arbitrability of Fraud?
Government of India v. Vedanta Limited: Supreme Court fortifies pro-enforcement approach, clarifies limitation period
Patel Engineering v NEEPCO: Supreme Court sets aside Award for Patent Illegality
2015 Arbitration Amendment 2019 Arbitration Amendments ADR Agami Arbitrability Arbitral Award Arbitration arbitration judgments 2018 arbitration review Arbitrator Appointment Ayyasamy BITs Bombay High Court Chloro Controls Civil Procedure Code Coastal Marine v Gareware-Wall Ropes Competence Competence Condonation of Delay Conflict of Interest court fees Delhi High Court Discharge of Contract Duro Fulgeura emergency award enforcement of award Events foreign award Fraud Guest Post ILS Law College Pune india Insufficiently Stamped Agreement Insurance Agreements Interest Interim Relief international arbitration investment arbitration Jobs Kerala High Court limitation Mediation NAFED Negotiation Skills Opportunity Oral Arbitration Agreement Order II RUle 2 PACT Patent Illegality Perkins Eastman Post-award Section 9 Public policy Recall of Order Res-judicata SAMA SBP Patel Engineering Seat Section 8 Section 9 Section 11 Section 11(6) Section 11(6A) Section 12(5) Section 14 Limitation Section 16 Section 17 Section 33 Stamp Act Section 34 Section 48 settlement singapore Singapore Convention SMS Tea v Chandamari Tea Supreme Court TRF v Energo Venue
Views expressed on this blog are strictly personal and attributable solely to the author(s).


text:
#include <px4_platform_common/tasks.h>
#include <drivers/drv_hrt.h>

#include <nuttx/config.h>

#include <cstdlib>
#include <cstring>
#include <cctype>
#include <fcntl.h>
#include <dirent.h>
#include <pthread.h>
#include <mathlib/mathlib.h>
#include <systemlib/err.h>
#include <parameters/param.h>
#include <version/version.h>

#include <arch/chip/chip.h>

#include "uavcan_main.hpp"
#include "uavcan_servers.hpp"
#include "uavcan_virtual_can_driver.hpp"

#include <uavcan_posix/dynamic_node_id_server/file_event_tracer.hpp>
#include <uavcan_posix/dynamic_node_id_server/file_storage_backend.hpp>
#include <uavcan_posix/firmware_version_checker.hpp>

#include <uORB/topics/vehicle_command.h>
#include <uORB/topics/vehicle_command_ack.h>
#include <uORB/topics/uavcan_parameter_request.h>

/**
 * @file uavcan_servers.cpp
 *
 * Implements basic functionality of UAVCAN node.
 *
 * @author Pavel Kirienko <pavel.kirienko@gmail.com>
 *         David Sidrane <david_s5@nscdg.com>
 */

/*
 * UavcanNode
 */

UavcanServers *UavcanServers::_instance;

UavcanServers::UavcanServers(uavcan::INode &main_node) :
	_vdriver(NumIfaces, UAVCAN_DRIVER::SystemClock::instance(), main_node.getAllocator(), VirtualIfaceBlockAllocationQuota),
	_subnode(_vdriver, UAVCAN_DRIVER::SystemClock::instance(), main_node.getAllocator()),
	_main_node(main_node),
	_server_instance(_subnode, _storage_backend, _tracer),
	_fileserver_backend(_subnode),
	_node_info_retriever(_subnode),
	_fw_upgrade_trigger(_subnode, _fw_version_checker),
	_fw_server(_subnode, _fileserver_backend),
	_param_getset_client(_subnode),
	_param_opcode_client(_subnode),
	_param_restartnode_client(_subnode),
	_beep_pub(_subnode),
	_enumeration_indication_sub(_subnode),
	_enumeration_client(_subnode),
	_enumeration_getset_client(_subnode),
	_enumeration_save_client(_subnode)
{
}

UavcanServers::~UavcanServers()
{
	if (_mutex_inited) {
		(void)Lock::deinit(_subnode_mutex);
	}

	_main_node.getDispatcher().removeRxFrameListener();
}

int
UavcanServers::stop()
{
	UavcanServers *server = instance();

	if (server == nullptr) {
		PX4_INFO("Already stopped");
		return -1;
	}

	if (server->_subnode_thread) {
		PX4_INFO("stopping fw srv thread...");
		server->_subnode_thread_should_exit.store(true);
		(void)pthread_join(server->_subnode_thread, NULL);
	}

	_instance = nullptr;

	server->_main_node.getDispatcher().removeRxFrameListener();

	delete server;
	return 0;
}

int
UavcanServers::start(uavcan::INode &main_node)
{
	if (_instance != nullptr) {
		PX4_INFO("Already started");
		return -1;
	}

	/*
	 * Node init
	 */
	_instance = new UavcanServers(main_node);

	if (_instance == nullptr) {
		PX4_ERR("Out of memory");
		return -2;
	}

	int rv = _instance->init();

	if (rv < 0) {
		PX4_ERR("Node init failed: %d", rv);
		delete _instance;
		_instance = nullptr;
		return rv;
	}

	/*
	 * Start the thread. Normally it should never exit.
	 */
	pthread_attr_t tattr;
	struct sched_param param;

	pthread_attr_init(&tattr);
	(void)pthread_attr_getschedparam(&tattr, &param);
	tattr.stacksize = PX4_STACK_ADJUSTED(StackSize);
	param.sched_priority = Priority;

	if (pthread_attr_setschedparam(&tattr, &param)) {
		PX4_ERR("setting sched params failed");
	}

	static auto run_trampoline = [](void *) {return UavcanServers::_instance->run(_instance);};

	rv = pthread_create(&_instance->_subnode_thread, &tattr, static_cast<pthread_startroutine_t>(run_trampoline), NULL);

	if (rv != 0) {
		rv = -rv;
		PX4_ERR("pthread_create() failed: %d", rv);
		delete _instance;
		_instance = nullptr;
	}

	return rv;
}

int
UavcanServers::init()
{
	errno = 0;

	/*
	 * Initialize the mutex.
	 * giving it its path
	 */
	int ret = Lock::init(_subnode_mutex);

	if (ret < 0) {
		PX4_ERR("Lock init: %d", errno);
		return ret;
	}

	_mutex_inited = true;

	_subnode.setNodeID(_main_node.getNodeID());
	_main_node.getDispatcher().installRxFrameListener(&_vdriver);

	/*
	 * Initialize the fw version checker.
	 * giving it its path
	 */
	ret = _fw_version_checker.createFwPaths(UAVCAN_FIRMWARE_PATH, UAVCAN_ROMFS_FW_PATH);

	if (ret < 0) {
		PX4_ERR("FirmwareVersionChecker init: %d, errno: %d", ret, errno);
		return ret;
	}

	/* Start fw file server back */

	ret = _fw_server.start(UAVCAN_FIRMWARE_PATH, UAVCAN_ROMFS_FW_PATH);

	if (ret < 0) {
		PX4_ERR("BasicFileServer init: %d, errno: %d", ret, errno);
		return ret;
	}

	/* Initialize storage back end for the node allocator using UAVCAN_NODE_DB_PATH directory */

	ret = _storage_backend.init(UAVCAN_NODE_DB_PATH);

	if (ret < 0) {
		PX4_ERR("FileStorageBackend init: %d, errno: %d", ret, errno);
		return ret;
	}

	/* Initialize trace in the UAVCAN_NODE_DB_PATH directory */

	ret = _tracer.init(UAVCAN_LOG_FILE);

	if (ret < 0) {
		PX4_ERR("FileEventTracer init: %d, errno: %d", ret, errno);
		return ret;
	}

	/* hardware version */
	uavcan::protocol::HardwareVersion hwver;
	UavcanNode::getHardwareVersion(hwver);

	/* Initialize the dynamic node id server  */
	ret = _server_instance.init(hwver.unique_id);

	if (ret < 0) {
		PX4_ERR("CentralizedServer init: %d", ret);
		return ret;
	}

	/* Start node info retriever to fetch node info from new nodes */
	ret = _node_info_retriever.start();

	if (ret < 0) {
		PX4_ERR("NodeInfoRetriever init: %d", ret);
		return ret;
	}

	/* Start the fw version checker   */
	ret = _fw_upgrade_trigger.start(_node_info_retriever);

	if (ret < 0) {
		PX4_ERR("FirmwareUpdateTrigger init: %d", ret);
		return ret;
	}

	/*  Start the Node   */
	return 0;
}

pthread_addr_t
UavcanServers::run(pthread_addr_t)
{
	prctl(PR_SET_NAME, "uavcan_fw_srv", 0);

	Lock lock(_subnode_mutex);

	/*
	Check for firmware in the root directory, move it to appropriate location on
	the SD card, as defined by the APDesc.
	*/
	migrateFWFromRoot(UAVCAN_FIRMWARE_PATH, UAVCAN_SD_ROOT_PATH);

	/* the subscribe call needs to happen in the same thread,
	 * so not in the constructor */
	uORB::Subscription armed_sub{ORB_ID(actuator_armed)};
	uORB::Subscription vcmd_sub{ORB_ID(vehicle_command)};
	uORB::Subscription param_request_sub{ORB_ID(uavcan_parameter_request)};

	/* Set up shared service clients */
	_param_getset_client.setCallback(GetSetCallback(this, &UavcanServers::cb_getset));
	_param_opcode_client.setCallback(ExecuteOpcodeCallback(this, &UavcanServers::cb_opcode));
	_param_restartnode_client.setCallback(RestartNodeCallback(this, &UavcanServers::cb_restart));
	_enumeration_client.setCallback(EnumerationBeginCallback(this, &UavcanServers::cb_enumeration_begin));
	_enumeration_indication_sub.start(EnumerationIndicationCallback(this, &UavcanServers::cb_enumeration_indication));
	_enumeration_getset_client.setCallback(GetSetCallback(this, &UavcanServers::cb_enumeration_getset));
	_enumeration_save_client.setCallback(ExecuteOpcodeCallback(this, &UavcanServers::cb_enumeration_save));

	_count_in_progress = _param_in_progress = _param_list_in_progress = _cmd_in_progress = _param_list_all_nodes = false;
	memset(_param_counts, 0, sizeof(_param_counts));

	_esc_enumeration_active = false;
	memset(_esc_enumeration_ids, 0, sizeof(_esc_enumeration_ids));
	_esc_enumeration_index = 0;

	while (!_subnode_thread_should_exit.load()) {

		if (_check_fw == true) {
			_check_fw = false;
			_node_info_retriever.invalidateAll();
		}

		const int spin_res = _subnode.spin(uavcan::MonotonicDuration::fromMSec(10));

		if (spin_res < 0) {
			PX4_ERR("node spin error %i", spin_res);
		}

		// Check for parameter requests (get/set/list)
		if (param_request_sub.updated() && !_param_list_in_progress && !_param_in_progress && !_count_in_progress) {
			uavcan_parameter_request_s request{};
			param_request_sub.copy(&request);

			if (_param_counts[request.node_id]) {
				/*
				 * We know how many parameters are exposed by this node, so
				 * process the request.
				 */
				if (request.message_type == uavcan_parameter_request_s::MESSAGE_TYPE_PARAM_REQUEST_READ) {
					uavcan::protocol::param::GetSet::Request req;

					if (request.param_index >= 0) {
						req.index = request.param_index;

					} else {
						req.name = (char *)request.param_id;
					}

					int call_res = _param_getset_client.call(request.node_id, req);

					if (call_res < 0) {
						PX4_ERR("couldn't send GetSet: %d", call_res);

					} else {
						_param_in_progress = true;
						_param_index = request.param_index;
					}

				} else if (request.message_type == uavcan_parameter_request_s::MESSAGE_TYPE_PARAM_SET) {
					uavcan::protocol::param::GetSet::Request req;

					if (request.param_index >= 0) {
						req.index = request.param_index;

					} else {
						req.name = (char *)request.param_id;
					}

					if (request.param_type == uavcan_parameter_request_s::PARAM_TYPE_REAL32) {
						req.value.to<uavcan::protocol::param::Value::Tag::real_value>() = request.real_value;

					} else if (request.param_type == uavcan_parameter_request_s::PARAM_TYPE_UINT8) {
						req.value.to<uavcan::protocol::param::Value::Tag::boolean_value>() = request.int_value;

					} else {
						req.value.to<uavcan::protocol::param::Value::Tag::integer_value>() = request.int_value;
					}

					// Set the dirty bit for this node
					set_node_params_dirty(request.node_id);

					int call_res = _param_getset_client.call(request.node_id, req);

					if (call_res < 0) {
						PX4_ERR("couldn't send GetSet: %d", call_res);

					} else {
						_param_in_progress = true;
						_param_index = request.param_index;
					}

				} else if (request.message_type == uavcan_parameter_request_s::MESSAGE_TYPE_PARAM_REQUEST_LIST) {
					// This triggers the _param_list_in_progress case below.
					_param_index = 0;
					_param_list_in_progress = true;
					_param_list_node_id = request.node_id;
					_param_list_all_nodes = false;

					PX4_DEBUG("starting component-specific param list");
				}

			} else if (request.node_id == uavcan_parameter_request_s::NODE_ID_ALL) {
				if (request.message_type == uavcan_parameter_request_s::MESSAGE_TYPE_PARAM_REQUEST_LIST) {
					/*
					 * This triggers the _param_list_in_progress case below,
					 * but additionally iterates over all active nodes.
					 */
					_param_index = 0;
					_param_list_in_progress = true;
					_param_list_node_id = get_next_active_node_id(0);
					_param_list_all_nodes = true;

					PX4_DEBUG("starting global param list with node %hhu", _param_list_node_id);

					if (_param_counts[_param_list_node_id] == 0) {
						param_count(_param_list_node_id);
					}
				}

			} else {
				/*
				 * Need to know how many parameters this node has before we can
				 * continue; count them now and then process the request.
				 */
				param_count(request.node_id);
			}
		}

		// Handle parameter listing index/node ID advancement
		if (_param_list_in_progress && !_param_in_progress && !_count_in_progress) {
			if (_param_index >= _param_counts[_param_list_node_id]) {
				PX4_DEBUG("completed param list for node %hhu", _param_list_node_id);
				// Reached the end of the current node's parameter set.
				_param_list_in_progress = false;

				if (_param_list_all_nodes) {
					// We're listing all parameters for all nodes -- get the next node ID
					uint8_t next_id = get_next_active_node_id(_param_list_node_id);

					if (next_id < 128) {
						_param_list_node_id = next_id;

						/*
						 * If there is a next node ID, check if that node's parameters
						 * have been counted before. If not, do it now.
						 */
						if (_param_counts[_param_list_node_id] == 0) {
							param_count(_param_list_node_id);
						}

						// Keep on listing.
						_param_index = 0;
						_param_list_in_progress = true;
						PX4_DEBUG("started param list for node %hhu", _param_list_node_id);
					}
				}
			}
		}

		// Check if we're still listing, and need to get the next parameter
		if (_param_list_in_progress && !_param_in_progress && !_count_in_progress) {
			// Ready to request the next value -- _param_index is incremented
			// after each successful fetch by cb_getset
			uavcan::protocol::param::GetSet::Request req;
			req.index = _param_index;

			int call_res = _param_getset_client.call(_param_list_node_id, req);

			if (call_res < 0) {
				_param_list_in_progress = false;
				PX4_ERR("couldn't send param list GetSet: %d", call_res);

			} else {
				_param_in_progress = true;
			}
		}

		// Check for ESC enumeration commands
		if (vcmd_sub.updated() && !_cmd_in_progress) {
			bool acknowledge = false;
			vehicle_command_s cmd{};
			vcmd_sub.copy(&cmd);

			uint8_t cmd_ack_result = vehicle_command_ack_s::VEHICLE_RESULT_ACCEPTED;

			if (cmd.command == vehicle_command_s::VEHICLE_CMD_PREFLIGHT_UAVCAN) {
				acknowledge = true;
				int command_id = static_cast<int>(cmd.param1 + 0.5f);
				int node_id = static_cast<int>(cmd.param2 + 0.5f);
				int call_res;

				PX4_DEBUG("received UAVCAN command ID %d, node ID %d", command_id, node_id);

				switch (command_id) {
				case 0:
				case 1: {
						_esc_enumeration_active = command_id;
						_esc_enumeration_index = 0;
						_esc_count = 0;
						uavcan::protocol::enumeration::Begin::Request req;
						// TODO: Incorrect implementation; the parameter name field should be left empty.
						//       Leaving it as-is to avoid breaking compatibility with non-compliant nodes.
						req.parameter_name = "esc_index";
						req.timeout_sec = _esc_enumeration_active ? 65535 : 0;
						call_res = _enumeration_client.call(get_next_active_node_id(0), req);

						if (call_res < 0) {
							PX4_ERR("UAVCAN ESC enumeration: couldn't send initial Begin request: %d", call_res);
							beep(BeepFrequencyError);
							cmd_ack_result = vehicle_command_ack_s::VEHICLE_RESULT_FAILED;

						} else {
							beep(BeepFrequencyGenericIndication);
						}

						break;
					}

				default: {
						PX4_ERR("unknown command ID %d", command_id);
						cmd_ack_result = vehicle_command_ack_s::VEHICLE_RESULT_UNSUPPORTED;
						break;
					}
				}

			} else if (cmd.command == vehicle_command_s::VEHICLE_CMD_PREFLIGHT_STORAGE) {
				acknowledge = true;
				int command_id = static_cast<int>(cmd.param1 + 0.5f);

				PX4_DEBUG("received storage command ID %d", command_id);

				switch (command_id) {
				case 1: {
						// Param save request
						int node_id;
						node_id = get_next_dirty_node_id(1);

						if (node_id < 128) {
							_param_save_opcode = uavcan::protocol::param::ExecuteOpcode::Request::OPCODE_SAVE;
							param_opcode(node_id);
						}

						break;
					}

				case 2: {
						// Command is a param erase request -- apply it to all active nodes by setting the dirty bit
						_param_save_opcode = uavcan::protocol::param::ExecuteOpcode::Request::OPCODE_ERASE;

						for (int i = 1; i < 128; i = get_next_active_node_id(i)) {
							set_node_params_dirty(i);
						}

						param_opcode(get_next_dirty_node_id(1));
						break;
					}
				}
			}

			if (acknowledge) {
				// Acknowledge the received command
				vehicle_command_ack_s ack{};
				ack.command = cmd.command;
				ack.result = cmd_ack_result;
				ack.target_system = cmd.source_system;
				ack.target_component = cmd.source_component;
				ack.timestamp = hrt_absolute_time();
				_command_ack_pub.publish(ack);
			}
		}

		// Shut down once armed
		// TODO (elsewhere): start up again once disarmed?
		if (armed_sub.updated()) {
			actuator_armed_s armed;

			if (armed_sub.copy(&armed)) {
				if (armed.armed) {
					_subnode_thread_should_exit.store(true);
				}
			}
		}
	}

	return (pthread_addr_t) 0;
}

void
UavcanServers::cb_getset(const uavcan::ServiceCallResult<uavcan::protocol::param::GetSet> &result)
{
	if (_count_in_progress) {
		/*
		 * Currently in parameter count mode:
		 * Iterate over all parameters for the node to which the request was
		 * originally sent, in order to find the maximum parameter ID. If a
		 * request fails, set the node's parameter count to zero.
		 */
		uint8_t node_id = result.getCallID().server_node_id.get();

		if (result.isSuccessful()) {
			uavcan::protocol::param::GetSet::Response resp = result.getResponse();

			if (resp.name.size()) {
				_count_index++;
				_param_counts[node_id] = _count_index;

				uavcan::protocol::param::GetSet::Request req;
				req.index = _count_index;

				int call_res = _param_getset_client.call(result.getCallID().server_node_id, req);

				if (call_res < 0) {
					_count_in_progress = false;
					_count_index = 0;
					PX4_ERR("couldn't send GetSet during param count: %d", call_res);
					beep(BeepFrequencyError);
				}

			} else {
				_count_in_progress = false;
				_count_index = 0;
				PX4_DEBUG("completed param count for node %hhu: %hhu", node_id, _param_counts[node_id]);
				beep(BeepFrequencyGenericIndication);
			}

		} else {
			_param_counts[node_id] = 0;
			_count_in_progress = false;
			_count_index = 0;
			PX4_ERR("GetSet error during param count");
		}

	} else {
		/*
		 * Currently in parameter get/set mode:
		 * Publish a uORB uavcan_parameter_value message containing the current value
		 * of the parameter.
		 */
		if (result.isSuccessful()) {
			uavcan::protocol::param::GetSet::Response param = result.getResponse();

			struct uavcan_parameter_value_s response;
			response.node_id = result.getCallID().server_node_id.get();
			strncpy(response.param_id, param.name.c_str(), sizeof(response.param_id) - 1);
			response.param_id[16] = '\0';
			response.param_index = _param_index;
			response.param_count = _param_counts[response.node_id];

			if (param.value.is(uavcan::protocol::param::Value::Tag::integer_value)) {
				response.param_type = uavcan_parameter_request_s::PARAM_TYPE_INT64;
				response.int_value = param.value.to<uavcan::protocol::param::Value::Tag::integer_value>();

			} else if (param.value.is(uavcan::protocol::param::Value::Tag::real_value)) {
				response.param_type = uavcan_parameter_request_s::PARAM_TYPE_REAL32;
				response.real_value = param.value.to<uavcan::protocol::param::Value::Tag::real_value>();

			} else if (param.value.is(uavcan::protocol::param::Value::Tag::boolean_value)) {
				response.param_type = uavcan_parameter_request_s::PARAM_TYPE_UINT8;
				response.int_value = param.value.to<uavcan::protocol::param::Value::Tag::boolean_value>();
			}

			_param_response_pub.publish(response);

		} else {
			PX4_ERR("GetSet error");
		}

		_param_in_progress = false;
		_param_index++;
	}
}

void
UavcanServers::param_count(uavcan::NodeID node_id)
{
	uavcan::protocol::param::GetSet::Request req;
	req.index = 0;
	int call_res = _param_getset_client.call(node_id, req);

	if (call_res < 0) {
		PX4_ERR("couldn't start parameter count: %d", call_res);

	} else {
		_count_in_progress = true;
		_count_index = 0;
		PX4_DEBUG("starting param count");
	}
}

void
UavcanServers::param_opcode(uavcan::NodeID node_id)
{
	uavcan::protocol::param::ExecuteOpcode::Request opcode_req;
	opcode_req.opcode = _param_save_opcode;
	int call_res = _param_opcode_client.call(node_id, opcode_req);

	if (call_res < 0) {
		PX4_ERR("couldn't send ExecuteOpcode: %d", call_res);

	} else {
		_cmd_in_progress = true;
		PX4_INFO("sent ExecuteOpcode");
	}
}

void
UavcanServers::cb_opcode(const uavcan::ServiceCallResult<uavcan::protocol::param::ExecuteOpcode> &result)
{
	bool success = result.isSuccessful();
	uint8_t node_id = result.getCallID().server_node_id.get();
	uavcan::protocol::param::ExecuteOpcode::Response resp = result.getResponse();
	success &= resp.ok;
	_cmd_in_progress = false;

	if (!result.isSuccessful()) {
		PX4_ERR("save request for node %hhu timed out.", node_id);

	} else if (!result.getResponse().ok) {
		PX4_ERR("save request for node %hhu rejected.", node_id);

	} else {
		PX4_INFO("save request for node %hhu completed OK, restarting.", node_id);

		uavcan::protocol::RestartNode::Request restart_req;
		restart_req.magic_number = restart_req.MAGIC_NUMBER;
		int call_res = _param_restartnode_client.call(node_id, restart_req);

		if (call_res < 0) {
			PX4_ERR("couldn't send RestartNode: %d", call_res);

		} else {
			PX4_ERR("sent RestartNode");
			_cmd_in_progress = true;
		}
	}

	if (!_cmd_in_progress) {
		/*
		 * Something went wrong, so cb_restart is never going to be called as a result of this request.
		 * To ensure we try to execute the opcode on all nodes that permit it, get the next dirty node
		 * ID and keep processing here. The dirty bit on the current node is still set, so the
		 * save/erase attempt will occur when the next save/erase command is received over MAVLink.
		 */
		node_id = get_next_dirty_node_id(node_id);

		if (node_id < 128) {
			param_opcode(node_id);
		}
	}
}

void
UavcanServers::cb_restart(const uavcan::ServiceCallResult<uavcan::protocol::RestartNode> &result)
{
	bool success = result.isSuccessful();
	uint8_t node_id = result.getCallID().server_node_id.get();
	uavcan::protocol::RestartNode::Response resp = result.getResponse();
	success &= resp.ok;
	_cmd_in_progress = false;

	if (success) {
		PX4_DEBUG("restart request for node %hhu completed OK.", node_id);

		// Clear the dirty flag
		clear_node_params_dirty(node_id);

	} else {
		PX4_ERR("restart request for node %hhu failed.", node_id);
	}

	// Get the next dirty node ID and send the same command to it
	node_id = get_next_dirty_node_id(node_id);

	if (node_id < 128) {
		param_opcode(node_id);
	}
}

uint8_t
UavcanServers::get_next_active_node_id(uint8_t base)
{
	base++;

	for (; base < 128 && (!_node_info_retriever.isNodeKnown(base) ||
			      _subnode.getNodeID().get() == base); base++);

	return base;
}

uint8_t
UavcanServers::get_next_dirty_node_id(uint8_t base)
{
	base++;

	for (; base < 128 && !are_node_params_dirty(base); base++);

	return base;
}

void
UavcanServers::beep(float frequency)
{
	uavcan::equipment::indication::BeepCommand cmd;
	cmd.frequency = frequency;
	cmd.duration = 0.1F;              // We don't want to incapacitate ESC for longer time that this
	(void)_beep_pub.broadcast(cmd);
}

void
UavcanServers::cb_enumeration_begin(const uavcan::ServiceCallResult<uavcan::protocol::enumeration::Begin> &result)
{
	uint8_t next_id = get_next_active_node_id(result.getCallID().server_node_id.get());

	if (!result.isSuccessful()) {
		PX4_ERR("UAVCAN ESC enumeration: begin request for node %hhu timed out.", result.getCallID().server_node_id.get());

	} else if (result.getResponse().error) {
		PX4_ERR("UAVCAN ESC enumeration: begin request for node %hhu rejected: %hhu", result.getCallID().server_node_id.get(),
			result.getResponse().error);

	} else {
		_esc_count++;
		PX4_INFO("UAVCAN ESC enumeration: begin request for node %hhu completed OK.", result.getCallID().server_node_id.get());
	}

	if (next_id < 128) {
		// Still other active nodes to send the request to
		uavcan::protocol::enumeration::Begin::Request req;
		// TODO: Incorrect implementation; the parameter name field should be left empty.
		//       Leaving it as-is to avoid breaking compatibility with non-compliant nodes.
		req.parameter_name = "esc_index";
		req.timeout_sec = _esc_enumeration_active ? 65535 : 0;

		int call_res = _enumeration_client.call(next_id, req);

		if (call_res < 0) {
			PX4_ERR("UAVCAN ESC enumeration: couldn't send Begin request: %d", call_res);

		} else {
			PX4_INFO("UAVCAN ESC enumeration: sent Begin request");
		}

	} else {
		PX4_INFO("UAVCAN ESC enumeration: begun enumeration on all nodes.");
	}
}

void
UavcanServers::cb_enumeration_indication(const uavcan::ReceivedDataStructure<uavcan::protocol::enumeration::Indication>
		&msg)
{
	// Called whenever an ESC thinks it has received user input.
	PX4_INFO("UAVCAN ESC enumeration: got indication");

	if (!_esc_enumeration_active) {
		// Ignore any messages received when we're not expecting them
		return;
	}

	// First, check if we've already seen an indication from this ESC. If so, just ignore this indication.
	int i = 0;

	for (; i < _esc_enumeration_index; i++) {
		if (_esc_enumeration_ids[i] == msg.getSrcNodeID().get()) {
			PX4_INFO("UAVCAN ESC enumeration: already enumerated ESC ID %hhu as index %d, ignored", _esc_enumeration_ids[i], i);
			return;
		}
	}

	uavcan::protocol::param::GetSet::Request req;
	req.name = msg.parameter_name;	// 'esc_index' or something alike, the name is not standardized
	req.value.to<uavcan::protocol::param::Value::Tag::integer_value>() = i;

	int call_res = _enumeration_getset_client.call(msg.getSrcNodeID(), req);

	if (call_res < 0) {
		PX4_ERR("UAVCAN ESC enumeration: couldn't send GetSet: %d", call_res);

	} else {
		PX4_INFO("UAVCAN ESC enumeration: sent GetSet to node %hhu (index %d)", _esc_enumeration_ids[i], i);
	}
}

void
UavcanServers::cb_enumeration_getset(const uavcan::ServiceCallResult<uavcan::protocol::param::GetSet> &result)
{
	if (!result.isSuccessful()) {
		PX4_ERR("UAVCAN ESC enumeration: save request for node %hhu timed out.", result.getCallID().server_node_id.get());

	} else {
		PX4_INFO("UAVCAN ESC enumeration: save request for node %hhu completed OK.", result.getCallID().server_node_id.get());

		uavcan::protocol::param::GetSet::Response resp = result.getResponse();
		uint8_t esc_index = (uint8_t)resp.value.to<uavcan::protocol::param::Value::Tag::integer_value>();
		esc_index = math::min((uint8_t)(uavcan::equipment::esc::RawCommand::FieldTypes::cmd::MaxSize - 1), esc_index);
		_esc_enumeration_index = math::max(_esc_enumeration_index, (uint8_t)(esc_index + 1));

		_esc_enumeration_ids[esc_index] = result.getCallID().server_node_id.get();

		uavcan::protocol::param::ExecuteOpcode::Request opcode_req;
		opcode_req.opcode = opcode_req.OPCODE_SAVE;
		int call_res = _enumeration_save_client.call(result.getCallID().server_node_id, opcode_req);

		if (call_res < 0) {
			PX4_ERR("UAVCAN ESC enumeration: couldn't send ExecuteOpcode: %d", call_res);

		} else {
			PX4_INFO("UAVCAN ESC enumeration: sent ExecuteOpcode to node %hhu (index %hhu)", _esc_enumeration_ids[esc_index],
				 esc_index);
		}
	}
}

void
UavcanServers::cb_enumeration_save(const uavcan::ServiceCallResult<uavcan::protocol::param::ExecuteOpcode> &result)
{
	const bool this_is_the_last_one =
		(_esc_enumeration_index >= uavcan::equipment::esc::RawCommand::FieldTypes::cmd::MaxSize - 1) ||
		(_esc_enumeration_index >= _esc_count);

	if (!result.isSuccessful()) {
		PX4_ERR("UAVCAN ESC enumeration: save request for node %hhu timed out.", result.getCallID().server_node_id.get());
		beep(BeepFrequencyError);

	} else if (!result.getResponse().ok) {
		PX4_ERR("UAVCAN ESC enumeration: save request for node %hhu rejected", result.getCallID().server_node_id.get());
		beep(BeepFrequencyError);

	} else {
		PX4_INFO("UAVCAN ESC enumeration: save request for node %hhu completed OK.", result.getCallID().server_node_id.get());
		beep(this_is_the_last_one ? BeepFrequencySuccess : BeepFrequencyGenericIndication);
	}

	PX4_INFO("UAVCAN ESC enumeration: completed %hhu of %hhu", _esc_enumeration_index, _esc_count);

	if (this_is_the_last_one) {
		_esc_enumeration_active = false;

		// Tell all ESCs to stop enumerating
		uavcan::protocol::enumeration::Begin::Request req;

		// TODO: Incorrect implementation; the parameter name field should be left empty.
		//       Leaving it as-is to avoid breaking compatibility with non-compliant nodes.
		req.parameter_name = "esc_index";
		req.timeout_sec = 0;
		int call_res = _enumeration_client.call(get_next_active_node_id(0), req);

		if (call_res < 0) {
			PX4_ERR("UAVCAN ESC enumeration: couldn't send Begin request to stop enumeration: %d", call_res);

		} else {
			PX4_INFO("UAVCAN ESC enumeration: sent Begin request to stop enumeration");
		}
	}
}

void
UavcanServers::migrateFWFromRoot(const char *sd_path, const char *sd_root_path)
{
	/*
	Copy Any bin files with APDes into appropriate location on SD card
	overriding any firmware the user has already loaded there.

	The SD firmware directory structure is along the lines of:

	  /fs/microsd/ufw
	     nnnnn.bin - where n is the board_id
	*/

	const size_t maxlen = UAVCAN_MAX_PATH_LENGTH;
	const size_t sd_root_path_len = strlen(sd_root_path);
	struct stat sb;
	int rv;
	char dstpath[maxlen + 1];
	char srcpath[maxlen + 1];

	DIR *const sd_root_dir = opendir(sd_root_path);

	if (!sd_root_dir) {
		return;
	}

	if (stat(sd_path, &sb) != 0 || !S_ISDIR(sb.st_mode)) {
		rv = mkdir(sd_path, S_IRWXU | S_IRWXG | S_IRWXO);

		if (rv != 0) {
			PX4_ERR("dev: couldn't create '%s'", sd_path);
			return;
		}
	}

	// Iterate over all bin files in root directory
	struct dirent *dev_dirent = NULL;

	while ((dev_dirent = readdir(sd_root_dir)) != nullptr) {

		uavcan_posix::FirmwareVersionChecker::AppDescriptor descriptor;

		// Looking for all uavcan.bin files.

		if (DIRENT_ISFILE(dev_dirent->d_type) && strstr(dev_dirent->d_name, ".bin") != nullptr) {

			// Make sure the path fits

			size_t filename_len = strlen(dev_dirent->d_name);
			size_t srcpath_len = sd_root_path_len + 1 + filename_len;

			if (srcpath_len > maxlen) {
				PX4_WARN("file: srcpath '%s%s' too long", sd_root_path, dev_dirent->d_name);
				continue;
			}

			snprintf(srcpath, sizeof(srcpath), "%s%s", sd_root_path, dev_dirent->d_name);

			if (uavcan_posix::FirmwareVersionChecker::getFileInfo(srcpath, descriptor, 1024) != 0) {
				continue;
			}

			if (descriptor.image_crc == 0) {
				continue;
			}

			snprintf(dstpath, sizeof(dstpath), "%s/%d.bin", sd_path, descriptor.board_id);

			if (copyFw(dstpath, srcpath) >= 0) {
				unlink(srcpath);
			}
		}
	}

	if (dev_dirent != nullptr) {
		(void)closedir(dev_dirent);
	}
}

int
UavcanServers::copyFw(const char *dst, const char *src)
{
	int rv = 0;
	uint8_t buffer[512] {};

	int dfd = open(dst, O_WRONLY | O_CREAT, 0666);

	if (dfd < 0) {
		PX4_ERR("copyFw: couldn't open dst");
		return -errno;
	}

	int sfd = open(src, O_RDONLY, 0);

	if (sfd < 0) {
		(void)close(dfd);
		PX4_ERR("copyFw: couldn't open src");
		return -errno;
	}

	ssize_t size = 0;

	do {
		size = read(sfd, buffer, sizeof(buffer));

		if (size < 0) {
			PX4_ERR("copyFw: couldn't read");
			rv = -errno;

		} else if (size > 0) {
			rv = 0;
			ssize_t remaining = size;
			ssize_t total_written = 0;
			ssize_t written = 0;

			do {
				written = write(dfd, &buffer[total_written], remaining);

				if (written < 0) {
					PX4_ERR("copyFw: couldn't write");
					rv = -errno;

				} else {
					total_written += written;
					remaining -=  written;
				}
			} while (written > 0 && remaining > 0);
		}
	} while (rv == 0 && size != 0);

	(void)close(dfd);
	(void)close(sfd);

	return rv;
}

redpajama_set_name: RedPajamaGithub


text:
È stato Professore di Archeologia e Antropologia del Vicino Oriente presso l'Università dell'Arizona a Tucson dal 1975 al 2002 ed è Professore Distinto di Archeologia del Vicino Oriente al Lycoming College in Pennsylvania.

Formazione
Dever ha conseguito il suo Bachelor of Arts al Milligan College nel 1955, un Master of Arts alla Butler University nel 1959 e un Bachelor of Divinity al Christian Theological Seminary nel 1959. Ha conseguito il dottorato di ricerca presso l'Università di Harvard nel 1966.

Carriera

Scavi
Dever è stato direttore degli scavi dell'Harvard Semitic Museum-Hebrew Union College a Gezer dal 1966 al 1971, poi nel 1984 e nel 1990; è stato direttore dello scavo a Khirbet el-Qom e Jebel Qacaqir (Cisgiordania) dal 1967 al 1971; ricercatore principale presso gli scavi di Tell el-Hayyat (Giordania) dal 1981 al 1985 e assistente direttore nella spedizione dell'Università dell'Arizona a Idalion (Cipro) nel 1991.

Argomentazioni
Ha usato la sua esperienza nell'archeologia sul campo del Vicino Oriente per argomentare (Did God Have a Wife? Archaeology and Folk Religion in Ancient Israel) sulla persistenza della venerazione della dea Asherah nella religione quotidiana della "gente comune" nei regni di Israele e Giuda. Usando ampie prove archeologiche da una serie di siti israeliti, in gran parte datati tra il XII e l'VIII secolo a.C., Dever ha sostenuto che questa religione "popolare'', con i suoi altari locali e oggetti di culto, amuleti e offerte votive, era rappresentativa della maggioranza della popolazione, e che la religione yahwista "pura", esposta nella Bibbia ebraica fu per molto tempo appannaggio di un'élite, un ideale religioso "in gran parte poco pratico".

Le opinioni di Dever sull'adorazione di Asherah si basano in misura significativa sulle iscrizioni a Khirbet el-Qom e Kuntillet Ajrud, così come su migliaia di statuette di Asherah che gli archeologi hanno trovato in varie località di Israele, inclusa una discarica vicino al Primo Tempio.

Sulla storicità della Bibbia
In pensione, Dever è diventato un frequente autore di questioni relative alla storicità della Bibbia. È duramente critico nei confronti degli studiosi che negano qualsiasi valore storico ai racconti biblici, ma è ben lungi dall'essere un sostenitore del letteralismo biblico. Invece ha scritto:

e

Tuttavia, Dever è anche molto chiaro sul fatto che l'archeologia Siro-palestinese dovrebbe essere vista in un disegno molto più ampio del semplice modo in cui si collega alla Bibbia:

A causa di queste posizioni, Dever può essere considerato un "centrista" nell'archeologia biblica: mentre è molto più scettico sulla storicità della Bibbia di studiosi come Kenneth Kitchen e James K. Hoffmeier (che accusa di fondamentalismo), è anche duramente critico nei confronti di studiosi come Israel Finkelstein, Ze'ev Herzog, Niels Peter Lemche, Philip R. Davies e Thomas L. Thompson (che accusa di postmodernismo e nichilismo).

Nei suoi libri What Did the Biblical Writers Know and When Did They Know It?, Who Were the Early Israelites and Where Did They Come From? e Has Archeology Buried the Bible? Dever nega la storicità di gran parte del Pentateuco (pur ammettendo che il suo contenuto potrebbe basarsi su di un substrato storico) e del Libro di Giosuè, ma afferma che materiale storico possa essere trovato dal Libro dei Giudici in poi. È un forte sostenitore della storicità del Regno Unito di Israele e dei re Saul, Davide e Salomone, sebbene egli ritenga che l'immagine che la Bibbia ci dà di essi sia estremamente esagerata; a suo parere, essi regnarono solo sui territori parte di Israele e dell'Autorità Nazionale Palestinese (eccezion fatta per la Striscia di Gaza, all'epoca controllata dai Filistei).

Al Lycoming College
Dever è entrato a far parte della facoltà del Lycoming College nell'autunno del 2008. È stato nominato Professore Distinto di Archeologia del Vicino Oriente.

Vita personale
Dever è figlio di un pastore evangelico ed è stato cresciuto come cristiano evangelico. In seguito si è convertito all'ebraismo riformato, sebbene non creda in Dio.
È sposato con Pamela Gaber, professoressa di Antico Testamento e Studi giudaici al Lycoming College. Si descrive come "un tradizionalista per temperamento e formazione".

Opere

Note

Collegamenti esterni

redpajama_set_name: RedPajamaWikipedia


Amazon offers up to 75% on all Sandisk 16 GB Pen drives. Limited time offer, Hurry up! before the offer ends. Don't forget to check out Sandisk Ultra 16GB pen drive, which has 2 ports on both the side to allow easy file transfer between smartphones, tablets and computers.


IU had revenues of $123 million in 2018 fiscal year — an all-time high in one-year and is more than double what the department reported in 2009.
BLOOMINGTON – IU athletic director Fred Glass used to refer to the profitable revenue streams opened by Big Ten television contracts and NCAA distributions as "the cavalry over the ridge" as IU, poorer than many of its peers, tried to "hold down the fort" financially.
Such metaphors aren't necessary anymore.
IU athletics reported revenues of almost $123 million in the 2018 fiscal year, according to its annual NCAA financial report. That marks an all-time high in one-year revenue for Indiana, and it's more than double the $61 million-plus the department reported in 2009, the year Glass took over.
In total, IU's athletic department reported $122,933,136 in revenues and $116,277,652 in expenses last year, according to documents obtained by IndyStar via a records request. Both numbers are record highs, and substantial increases on Indiana's 2017 totals.
The $6,655,484 net profit is IU's largest in terms of hard dollars (though not when adjusted for inflation) since the NCAA began distributing these reports more than 10 years ago.
Indiana's numbers are not an outlier in college athletics.
Ballooning TV contracts, conference-specific networks and other factors have exploded revenues across the college landscape in the last decade-plus. The Big Ten, which launched the Big Ten Network in 2007, has remained at the vanguard of that expansion. Last year, IU reported nearly $41 million in media rights, almost $5 million in NCAA distributions and a further $12.62 million in conference distributions.
Glass' department coupled that with almost $10 million in royalties and licensing revenues. And contributions, which have increased every year since 2012 and last year clocked in at almost double what they were 10 years ago, were reported at nearly $25.5 million.
"It's allowed us to do some things I think we've needed to do," Glass said.
That's included investing more in coaching salaries. Glass cited the money IU has spent to retain and hire assistant football coaches this offseason, a number that could top $1 million within the next year. He also mentioned the hiring of men's basketball coach Archie Miller.
It has also allowed Indiana to couple aforementioned revenue streams to those contributions, and either renovate or replace nearly every athletics facility on IU's campus.
Assembly Hall and Memorial Stadium have both undergone significant renovation. Indiana's baseball, softball, wrestling and volleyball programs have all received brand new arenas or stadiums. The university's golf course is in the midst of a sweeping redesign. And Armstrong Stadium, where the Hoosiers' soccer teams compete, is next.
The report also includes a line item for more than $1.6 million in "excess transfers to institution," money paid back to the university by the department.
Glass said it's common for the athletics department to flow some funds back to IU as a whole. That can take the form of support for academic pursuits, like the department's involvement in helping establish Indiana University's new school of global and international studies. Or it can simply be repayment for loans the university fronted the department on certain projects, to cover costs while IU was waiting on pledged donations to arrive.
For the 13th year running, IU athletics also finished its fiscal year in the black. Not since 2005 has the department operated in a single year with expenses greater than revenues, even though IU athletics doesn't receive money directly from the state or the university.
Those net gains have allowed Indiana to cover necessary expenses to the point that, should financial projections for 2019 hold, IU will be able to create an athletics reserve fund beginning next year.
More: What do you think of these IU uniforms for Black History Month?


text:
The Able Danger hearing that was not
News With Views
by Dennis L. Cuddy, Ph.D.
The U.S. Senate Judiciary Committee on September 21, 2005 held a public hearing on the Department of Defense classified Project Able Danger, which was designed, before the attacks of 9-11, to identify members of Al Qaeda around the world. Shortly after this hearing, I wrote that the next hearing was scheduled for October 5. However, this second hearing was cancelled, as the Committee went on to other business. I called the Committee and asked when the next hearing would be rescheduled, but was told they had no idea. This strikes me as reminiscent of the month before 9-11, when the August 6, 2001 Presidential Daily Briefing indicated Osama bin Laden was 'determined to attack in the U.S.,' yet nothing was done to prevent the attacks...
//www.newswithviews.com/Cuddy/dennis45.htm


Data lost in smartphone has become an common issue with smartphone, user may accidentally delete information from your device by just a simply accidentally touch a wrong button on the screen. With the rely on smartphone of today's user, that one fatal touch may cause a lot of lost problem, like document lost, photos lost and some personal details.
But one simple we would like to introduce a software – Wondershare's Dr Fone, (a free feature-limited demo) which is priced at $29.95 program that capable of recovering lost data from iOS devices.
Dr Fone is a desktop software available in Windows Version and Mac Version. It allows user to recover data directly from all sorts of iOS devices, from iPhone, iPad, even iPod touch.
There many backup/supported files by Dr Fone : Contacts, Messages, Call history, Notes, Photos, Video,Calendar, Reminder, WhatsApp messages, Messenger, Voice memos, Voicemail, Safari's bookmark, App's photos, App's video, App's documents. With all the list mention it is basically the whole phone. There are two ways to use iOS data recovery:from the device itself or from iTunes backup(in case you've lost the device).
To start, simply plug the USB cable to your device and PC/Mac on the other end, launch the software and you are ready to backup/restore in one click. Dr Fone. might need the device in mode(Device Firmware Update) which prevents the OS from loading. With only a few seconds for Dr.Fone to connect with the device in DFU mode, then automatically begins scanning your device for deleted files.
3 Simple Solutions to Recover deleted photos from iPhone X/8/7/6/6s/5s/5.
Then run dr.fone and connect your iPhone to the computer.
When the program detects your iPhone, select the file types you would like to recover and click on 'Start Scan' to carry on the process.
4.When the scan stops, you can preview and check all data available to recover in the scan result.
5.To recover photos, you can preview every item in the categories of Camera Roll, Photo Stream and App Photos.
6. Preview them one by one, and tick the item you want. Then click on the Recover button to save them on your computer with one click.
If we are unable to find the photos directly from the iPhone, we can still try to use dr.fone to extract the data from iTunes backup files.
All that we are describing is shown in the screenshot below. After running the dr.fone program, connect your iPhone to computer. This time choose 'Recover from iTunes Backup File' from the left column.
The program will detect all iTunes backup files existing on your computer. Choose the backup for your iPhone and click on the 'Start Scan'. It should take as little as 2 minutes.
There should now be a big smile on your face. There, shown in clear details are all your memories, ready to be restored.
Just put a check mark against which ones you chose to recover, then click on the 'Recover to Computer' button.
This time, from the left side of dr.fone, you should select 'Recover from iCloud Backup File'. You should enter your Apple ID and the password.
After that, the program will automatically find all backup files existing in your iCloud account.
Choose the one you want to recover iPhone photos from to download it to your computer. This will take longer, depending of the size of the iCloud back-up and your internet connection. Please be patient.
Once the download of the iCloud back-up has completed, you can review the content which was contained in your iCloud backup.
For the photographs, you can look at 'Photos & Videos'. Preview them one by one and check the items you want.
Then click on the 'Recover to Computer' button to save your photographs to your computer.
There are always imperfection in any software develop, so is Dr Fone. It sometimes still can't recover fully all the data, it only pick up bits and pieces of the deleted data, let's say about 85 percents of the data. But the software is always use for "accidents happens". Always recommend that always backup your phone on cloud or computer occasionally. Perhaps once a month or if you have more important information, immediately.
The software is totally easy to use and it provide 30 days Free Trial but the price is kinda expensive to purchase the $29.95 But it is a lifetime license. But sometimes with $30 can save more more than that.


Natural-jute-rug - Creative living room updates you can do in a weekend (Part 2). Magnificent Living Room with Quirky Decoration (Part 1). Easy Ways to Make Your Living Room Look Expensive (Part 2). wool throw blanket. chevron hand woven area rug. wood ceiling planks.
Published at Thursday, June 14th 2018, 20:47:56 PM by Riordan Lynch. area rugs. I like it when a room looks as if it has evolved over time. I buy almost all of our antique carpets at auction because the mark-up at most rug dealers is really high!
Published at Wednesday, June 13th 2018, 21:39:22 PM by Jeraldo Sanz. bookcases. Install picture lighting above your bookcase. Picture lights like the ones atop the bookshelves in Fiona Kotur`s Hong Kong home instantly make us think of grand old libraries. Use them to give simple furniture a sense of importance.
Published at Saturday, June 16th 2018, 21:19:39 PM by Mare O'Connor. area rugs. Carpets also reflect history and culture (one could literally tour the globe and discover it's history by looking at carpets). Carpets can be art and should be purchased with one's budget in mind and the time line for that particular space.
Published at Thursday, February 15th 2018, 10:24:01 AM. area rugs By Stanczia Farkas. Carpets also reflect history and culture (one could literally tour the globe and discover it's history by looking at carpets). Carpets can be art and should be purchased with one's budget in mind and the time line for that particular space.
Published at Sunday, February 11th 2018, 21:54:31 PM. area rugs By Alair Moreau. I thought that a mix of contemporary furniture and a historic carpet would imply the ascent of man and that we are continuing to evolve. Often I use a carpet to pull in all of the color elements of an interior and its adjoining views and gardens to create a harmonious continuum. I prefer a wool/silk blend for its feel and sheen, especially if people are going to roll around or play on it.
Published at Saturday, February 10th 2018, 16:59:11 PM. area rugs By Irmine Wagner. LAURA HUNT. Make sure it's made from natural materials. Any rules to follow when choosing the size? Generally speaking, a foot to foot and a half off the walls. What should people expect to spend for a standard 8' x 10' rug? There is no such thing as a standard price…it all depends on your budget!
Published at Thursday, February 08th 2018, 20:57:21 PM. area rugs By Rainor Becker. Our most primitive cave drawings, scriptures, and novels showcase numerous references to these rugs. Some of the processes still used today were created thousands of years ago, and handed down through instructional writings and drawings.
Published at Wednesday, February 07th 2018, 11:16:27 AM. Coffee Tables By Rainor Becker. The Reeve table from West Elm is reminiscent of something you`d be really fortunate to find second-hand or vintage, but if you don`t have such luck (or the patience to hunt one down), this is a really great alternative.


text:
Aug. 24, 1967 – Dec. 29, 2021
Posted Wednesday, January 5, 2022 12:00 am
Keith Alan Schweitzer was born Aug. 24, 1967, in Friend, to Gerald and Lois (Stutzman) Schweitzer, the sixth of seven children. He passed away Wednesday, Dec. 29, 2021, at his home in Milford after a courageous three-year battle with pancreatic cancer at the age of 54.
In his youth, he accepted Christ as his Savior and was baptized at West Fairview Mennonite Church and later attended Salem Country Church. He went to Centennial Public School, graduating with the class of 1985.
On June 19, 1993, he was united in marriage to Julie Kremer and to this union, four daughters were born; Jenna, Krystal, Brittney and Kylie. Keith loved his family and encouraged each one to live for Christ. He showed his love for Christ by serving others. Keith enjoyed volunteering on the Beaver Crossing Rescue Unit and served over 25 years with the Lincoln jail ministry. Keith worked various jobs throughout his lifetime, often in sales. He also enjoyed raising livestock and spending time working with his animals.
Survivors include his wife, Julie, of 28 years, Milford; daughters, Jenna, Krystal, Brittney and Kylie of Milford; sisters and brothers-in-law, Sheryl Schweitzer, Milford, Donna and Steve Roth, Wadena, Minnesota, Susan and Wendell Roth, Milford, Rita and Daniel Miller, Beaver Crossing; brother and sister-in-law, Kevin and Charleen Schweitzer, Milford; parents-in-law, Steve and Wanda Kremer, also of Milford; brothers-in-law and sisters-in-law, Zach and Tammi Kremer, Jon and Janelle Oswald, Pat and Lish Kremer, Thad and Darla Kremer, all of Milford and a host of other relatives and friends.
Keith was preceded in death by his parents; his brother, Elwin; nephews, Trent Roth and Chad Martin.
The funeral service was Jan. 3 at East Fairview Mennonite Church, Milford, with interment in Salem Cemetery. Memorial contributions are suggested to the Heartland Cancer Foundation. Condolences may be left for the family online at www.lauberfh.com.


The Villa 360 Resort and Spa has true get away charm on one of Thailands most magical islands, Koh Phi Phi. Set on the undisturbed beach of Loh Bagao, the Villa 360 Resort and Spa dazzles you with its expansive views of the islands off Phi Phi and the Krabi coastline.
The Villa 360 Resort and Spa has plenty to entertain you with an in house wellness and spa center, a gym and the infinity pool that is the center of complex. The 'what to do' list reads like the ideal for those who like exploring nature and if you are partial to diving, snorkeling, beach combing, sightseeing, adventure treks, the Villa 360 Resort and Spa has it all.
The Villa 360 Resort and Spa accommodation are private and spacious, all you need in a 4 star resort and as the villas climb the slopes, the views get truly impressive.
Read all 13 reviews and thoughts (average: 2.92 out of 5) on the Villa 360 Resort And Spa before you book online.