text:
Search for tag "Ships"
1844 2 or 3 Oct The Báb departed from Búshihr on His pilgrimage. [B57; MH119, 121, GPB9]
He instructed His followers to await His arrival in Karbalá. [DB86, 87; MH122; SBBH1:23]
He had been awaiting the letter from Mullá Husayn before starting on His pilgrimage. [DB123; MH117]
The vessel taking the Báb to Jiddah was probably the Arab sailing-boat named Futúh-ar-Ras`ul. [B69]
He joined the company of a group of pilgrims from Fárs. [DB76-77]
It was slow, stormy and unsteady sailing and the passengers were in constant dispute amongst themselves. [DB129note2]
The Báb, recognizing the difficulty in sea-travel, prayered that conditions might be improved. Nabil noted on page 131 "Within a short space of time, since that prayer was offered, maritime transport have greatly multiplied, and the Persian gulf, which in those days hardly possessed a single steam-driven vessel, now boast a fleet of ocean liners...". He goes on to attribute the Industrial Revolution to the impulse of the Revelation.
After twelve days the vessel made a rest-stop in Mascate for several days. The Báb attempted to convert a religious man of high rank but was unsuccessful. [DB129note2; [DB130note1] Karbala; Iraq; Jiddah; Saudi Arabia; Muscate Bab, Life of; Bab, Pilgrimage of; Mulla Husayn; Ships; Industrial Revolution
1844. c. Dec The Báb and His companions arrived in Jiddah after a rough sea voyage of two months. There they put on the garb of the pilgrim and proceed to Mecca by camel. [B71; DB129, 132]
See B69–71 and DB130–1 for a description of the voyage.
Quddús walked from Jiddah to Mecca. [B71, DB132, GPB9]
See DB132 for the story of the theft of his saddlebag by a Bedouin. Jiddah; Saudi Arabia; Mecca; Saudi arabia Bab, Life of; Bab, Pilgrimage of; Quddus; Ships; Camels
1868. 21 Aug Bahá'u'lláh and His companions left Gallipoli on an Austrian-Lloyd steamer. CH62 says it was a Turkish boat. [BKG263; GPB182; RB2:411]
CH62 says it was a Turkish boat.
There were 72 exiles, 10 soldiers and 2 officers. The journey took 11 days. [CH63]
See BKG270 for map of the journey.
Towards sunset the same day the steamer touched on Madellí and stoped for a few hours. It continued on to Smyrna the same night where they stayed for two days and left at night. [BKG264; N&N22]
Mírzá Yahyá and the four Bahá'ís arrested at Constantinople, including Mishkín-Qalam, were sent to Famagusta in Cyprus. [BKG268; GPB179]
See also Gallipoli; Madelli; Smyrna; Famagusta; Turkey; Cyprus Bahaullah, Life of; Bahaullah, Banishment of; Ships; Mishkin-Qalam; Mirza Aliy-i-Sayyah-i-Maraghihi (Mulla Adi-Guzal); Aqa Abdul-Ghaffar; Aqa Muhammad-Baqir (Qahvih-chiy-i Mahallati); Mirza Yahya (Subh-i-Azal); Exile; Cyprus exiles; Bahaullah, Basic timeline; - Basic timeline, Expanded
1868. 23 Aug The steamer left Smyrna at night for Alexandria, which she gained on a morning two days later. [BKG265] Izmir (Smyrna); Turkey; Alexandria; Egypt Bahaullah, Life of; Bahaullah, Banishment of; Ships
1868 26 - 27 Aug The steamer carrying Bahá'u'lláh docked at Alexandria, early in the morning. [BKG265; RB3:6]
The exiles changed ships, again onto an Austrian-Lloyd ship. [BKG265]
Several exiles go ashore to make purchases. One passes by the prison house where Nabíl was detained. Nabíl, watching from the roof of his prison cell, recognized him. [CH65, BKG265, 267; RB3:6]
Nabíl and Fáris Effendi write letters to Bahá'u'lláh which were delivered by a Christian youth. The youth returned with a Tablet from Bahá'u'lláh and gifts from `Abdu'l-Bahá and Mírzá Mihdí. [BKG267–8; RB3:6–7]
The ship bearing Bahá'u'lláh and the exiles left Alexandria for Port Said. [BKG268] Alexandria; Egypt Bahaullah, Life of; Bahaullah, Banishment of; Nabil-i-Azam; Faris Effendi; Gifts; Ships
1868. 29 Aug In the morning the ship arrived in Port Said. At nightfall it traveled on to Jaffa. [BKG268] Port Said; Jaffa; Israel Bahaullah, Life of; Bahaullah, Banishment of; Ships
1868. 30 Aug The ship arrived at Jaffa at sunset. At midnight the ship left for Haifa. [BKG168] Jaffa; Haifa; Israel Bahaullah, Life of; Bahaullah, Banishment of; Ships
1910 29 Aug `Abdu'l-Bahá departed for Egypt on board the Kosseir accompanied by two attendants, Mírzá Munír-i-Zayn and 'Abdu'l-Husayn. [ABF5, BBRXXX; GPB280, AB134-135, Bahá'í News #12 16Oct1910 pg206, the Message from the Universal House of Justice dated August 29, 2010]
See letter from Sydney Sprague to Isabella Brittingham which indicates that He left sometime before this date.
GPB280 and AY84 say He departed in September.
After one month in Port Said He embarked for Marseille but turned back to Alexandria owing to His health. In a letter to Munírih Khánum He stated that His intention was to proceed to America or South Africa. [GPB280, ABF5]
He stayed for a few days in the Victoria Hotel but then moved to a rented house in Ramleh, a suburb of Alexandria, where He stayed for about one year. [GPB280, AB136]
Early in May of 1911 he moved to Cairo and took up residence in nearby Zaytún. [AB138]
It was during this period that a sudden change occurred. A journalist who had previously been hostile towards Him took a new tone. [AB136]
The Russian poet Isabel Grinevsky, the Oriental Secretary of the British Agency, Ronald Storrs, Lord Kitchener, George Zaydán, eminent writer and celebrated editor as well as clerics, aristocrats, administrators, parliamentarians, men of letters, journalists and publicists, Arabs, Turks and Persians all sought out His company and met with Him. This period could be considered the first public proclamation of the Faith. [MRHK348, AB136-139]
See AB138-139 for a description of His triumphs during this period. Haifa; Port Said; Ramleh; Alexandria; Cairo; Zaytun; Egypt Abdul-Baha in Egypt; Abdul-Baha, Travels of; Abdul-Baha, Life of; Proclamation; Firsts, Other; Isabella Grinevskaya; Ships; Kosseir;
1911 11 Aug The beginning of `Abdu'l-Bahá's first Western tour. [AB139]
`Abdu'l-Bahá departs from Egypt with a party of four on the S. S. Corsica for Marseilles, Thonon-les-Bains and London. [AB139; GPB280; SBR22, SoW Vol2 no.10 (8 September, 1911) p7]
Subsequent research has shown that the ship was not the S.S. Corsica as stated in GPB280 but rather the L'Orenoque. See 'Abdu'l-Bahá in Paris page 6 note 47.
See BW1:130 for a list of cities He visits between 1911 and 1913.
It is believed that funds for 'Abdu'l-Bahá's teaching journeys to the West were provided by an oil-rich believer in Baku, Áqa Músá Maqiof,. [AY11; ABF295note684] Baku; Alexandria; Egypt; Marseilles; Thonon-les-Bains; France; London; United Kingdom Abdul-Baha, Travels of; Abdul-Baha, First Western tour; Abdul-Baha, Life of; Abdul-Baha in Egypt; Abdul-Baha, Basic timeline; S. S. Corsica; Orenoque; Ships; Funds; Donations; - Basic timeline, Condensed; - Basic timeline, Expanded
1911 16 Aug After four and half days of travel over 2500 kilometres L'Orénoque arrived in Marseille, France's major port on the Mediterranean. 'Abdu'l-Bahá was met by Hippolyte Dreyfus-Barney who had recently married (28 April). He and his wife would be 'Abdu'l-Bahá's constant companions in France and would later be in His company in England and the eastern United States. They had already met 'Abdu'l-Baha in Palestine and Laura stayed there between 1904 and 1906. [ABF8]
He stayed at the Hôtel Louvre de la Paix at 53, la Canebière (today a C&A department store). [ABF9] Marseille; France Abdul-Baha, First Western tour; Hippolyte Dreyfus-Barney; Laura Clifford Barney; Orenoque; Ships
1911 22 Aug - 3 Sep `Abdu'l-Bahá took up residence at Thonon-les-Bains on Lake Leman (Lake Geneva). [AB140; GPB280; SBR219]
While there He encountered Zillu's-Sultán, the eldest son of the Sháh of the time, Násirid-Dín Sháh. It was he who had ratified the execution of the King of Martyrs and the Beloved of Martyrs and at least 100 others. The whole family was in exile in Geneva at this time. 'Abdu'l-Bahá was very courteous to this man who had been such an inveterate enemy of the Cause. [DJT172, AY19, GPB201] .
The Master sent for Juliet Thompson who had been waiting in London for His permission to join Him.
During His stay he had a visit from Annie Boylan, a member of the New York community that was experiencing disharmony. Unaware of Bahá'í election procedures, a group that was unhappy with the disunity and ineffectiveness of the Council had organized a vote to be rid of several of its Council members. 'Abdu'l-Bahá had written to the community a short time before recommending that the Council be expanded from 9 to 27 members so that all factions could be represented. He also recommended that women be included on the Council and that the name be changed to "the Spiritual Assembly of the Bahá'ís of New York". This apparently addressed the problem of disunity because the New York community went on to contribute significantly to the progress of the Faith on a national level. [DJT181, BFA2p338]
Horace Holley, who lived at Quattro Torri, Siena, Italy at the time, along with his wife Bertha Herbert and baby daughter Hertha, visited 'Abdu'l-Bahá on the 29th and 30th of August. Please see his Religion for Mankind p 232-237 for a pen portrait of 'Abdu'l-Bahá.
He met with Elizabeth Stewart and Lillian Kappes who were on their way to Tehran. [find reference]
It would appear that He returned to Marseilles and travelled to London by sea. [SCU22-23] Thonon-les-Bains; Lake Leman; Marseille; France; Switzerland; Italy; London; United Kingdom; New York; United States Abdul-Baha, Travels of; Abdul-Baha, First Western tour; Board of Council; Spiritual Assemblies; Unity; Zillus-Sultan; Persecution; Mirza Muhammad-Hasan (King of Martyrs); Mirza Muhammad-Husayn (Beloved of Martyrs); King of Martyrs and Beloved of Martyrs; Juliet Thompson; Horace Holley; Elizabeth Stewart; Lillian Kappes; Ships
1911 7 Dec 'Abdu'l-Bahá departed Marseille for Egypt on board Le Portugal. It travelled to Beirut via Alexandria and Port Said and reached Alexandria on the 12th of December. [ABF255-256; AB167; GPB280; SBR25] Marseille; France; Alexandria; Egypt Abdul-Baha, Travels of; Abdul-Baha, First Western tour; Abdul-Baha in Egypt; Abdul-Baha, Life of; Ships
1912 5 Dec `Abdu'l-Bahá sailed on the S. S. Celtic from New York to Liverpool. [239D:193–4; AB337; GPB281]
For `Abdu'l-Bahá's final words to the Bahá'ís, spoken while on board ship, see PUP468.
For Ahmad Sohrab's account of the sea crossing see SW3, 16:2. New York; United States; Liverpool; United Kingdom Abdul-Baha, Travels of; Abdul-Baha, Second Western tour; Ships; S. S. Celtic; Ahmad Sohrab; Abdul-Baha, Life of
1912 13 Dec `Abdu'l-Bahá arrived in Liverpool aboard the S. S. Celtic at about 9PM. He was met by dozens of Bahá'ís from Liverpool, Manchester and Leads as well as Hippolyte Drefus-Barney who had come from Paris. [AB343; SBR38, ABTM273-4] Liverpool; United Kingdom Abdul-Baha, Travels of; Abdul-Baha, Second Western tour; S. S. Celtic; Ships
1913 13 Jun `Abdu'l-Bahá left Marseilles on the S. S. Himalaya for Port Said. [AB395]
He sent a telegram to Haifa instructing the many pilgrims awaiting His return to come to Port Said. Because of the great numbers who came, there wasn't sufficient hotel accommodations and a large tent was erected on the roof in which to hold meetings. SoW Vol 4 No 7 p121. Marseille; France; Port Said; Egypt Abdul-Baha, Travels of; Abdul-Baha, Second Western tour; Abdul-Baha in Egypt; S. S. Himalaya; Ships; Abdul-Baha, Life of; Pilgrims; - Basic timeline, Expanded; Abdul-Baha, Basic timeline
1913 2 Dec `Abdu'l-Bahá boarded a Lloyd Triestino boat bound for Haifa. [AB402]
"Having raised the warning and urged the world to work for peace, 'Abdu'l-Bahá returned on 5 December 1913 to Haifa, then part of the Ottoman Empire. Aware of the coming war, He took steps to protect the Bahá'í community under His stewardship and to avert a famine in the region. One of His first decisions upon returning to the Holy Land was to send home all the Bahá'ís who were visiting from abroad." [BWNS1297] Egypt; Haifa Lloyd Triestino; Ships; Abdul-Baha, Travels of; Abdul-Baha in Egypt; Abdul-Baha, Life of; Abdul-Baha, Basic timeline; - Basic timeline, Expanded
Love, Power, and Justice, by William S. Hatcher, in Journal of Bahá'í Studies, 9:3 (1999). [about]


text:
The Vulnerability of Loving You.
0 Boost Score Sarah Harvey (81,845)
There are so many ways to get hurt in love.
I know them intimately, like the cracks of dry skin on my palms, like the scars above my knee from when I fell off my bike when I was 10.
There are so many ways to f*ck it up.
I can name them two by two as they skip off to make trouble and cause mayhem in a city near you.
There's betrayal and miscommunication, distraction and disappointment. There's annoyance and irritation. There's fear of losing and loss, even within a single day's worth of hellos and goodbyes. There's cheating and lying, there's coldness and icy distance…just to name a few.
What a list. Yes, bitterness and powerlessness have entered the room, folks. Pessimism, too. I shiver in response and force the tears back.
But you know what? I'd like to think about it all in a different way—because power is right there, next to the powerlessness. Sweetness is there, right next to the fear.
Their fingers are even touching, clasped and balmy at times.
Honestly, I think the vulnerability of it all is outstanding.
Even if love doesn't turn out the way we expect it to, we learn. We grow. We dig deep into the dirt and find treasures in our chests we didn't know were there.
It's not easy, no.
But it's real.
And it's astonishing what's revealed as we dare to look down into the landscapes of our hearts—as we bravely peer into the reflection that a relationship provides.
We can touch into our deepest essence and swim around in the crisp, mysterious waters of our souls. We get a clear view of who we want to be, who we don't want to be—and who we are right now.
We see what wounds are still lingering with secret ache. We see what regrets are hanging out like cobwebs in the basements of our beings.
We begin to witness what we need. We try to ask for it—sometimes we succeed, sometimes we fail. And that's okay.
We learn about compromise, and are occasionally dumbfounded by the sudden appearance of our stubborn streak in bold italics—who me?
And you know what? I just think it all feels so much more spacious when love doesn't mean waiting with bated breath for happily ever after, tied neatly with a bow
But is woven instead with a simple promise we can uphold:
I will learn you. How you act silly when you're feeling really vulnerable.
You will learn me. How I get quiet when I'm sad and lash out when I'm hurt.
Maybe it really is that simple.
We can keep listening, keep leaning in, keep the conversations wide-open and flowing.
We can agree to stumble through it all, knowing full well it won't always be pretty.
But it will be worth it.
Because learning you feels sweet.
Because I am learning about me too. And me oh my, what a wild path it has been—messy, overgrown, and hidden in spots. But alas, I keep going.
I'm learning that my needs matter. I'm learning how to speak up, that my voice has weight, that my heart deserves to feel safe and joyful in her gentle beauty. I am learning to stop apologizing so damn much. I am learning how easily I can lose myself and fall face-first into the seductive traps of my old codependent ways.
Bear with me now; I'm having a Carrie Bradshaw moment like it's 2003…and I can't help but wonder—is love only successful if it ends in "I do?" Is it not already successful if it encourages self-inquiry and growth?
Questions bloom and outnumber the answers.
Yes, there are so many ways to get hurt in love. It can feel like a freakin' minefield.
But there are also so many ways to heal.
At the end of the day, we can't avoid the inherent vulnerability of living with a beautiful, beating, human heart.
We can't escape the tender risks that come whispering alongside love.
But would we really want to?
When Two Givers Find Each Other.
Self-Love: Embracing all of our Loud, Messy, Vulnerable, Tender, Beautiful Selves.
For those who are Forever Stumbling in & out of Love.
Sarah Harvey | Contribution: 81,845
Sarah Harvey is a therapist, poet, and author. She loves mountain meadows and challenging hikes. Through her personal healing journey, she has found freedom in creative expres… Read full bio
author: Sarah Harvey
Image: Gui Seiz/flickr
Editor: Lisa Erickson

redpajama_set_name: RedPajamaCommonCrawl


text:
Issue: �Vol. 39 / No. 15 / 9 April 2009
Life after Fleetwood Mac for Stevie Nicks
Just in the Nicks of time
by Gregg Shapiro
Growing up in Chicago, the TV concert series Soundstage was always a source of pride for me, coming as it did from local PBS station WTTW's northside studio. So imagine my excitement when I learned the Soundstage program that Stevie Nicks filmed was being released on DVD as Live in Chicago (Reprise/Warner Bros.), with a companion CD, The Soundstage Sessions (Reprise/Warner Bros.). The 17-song DVD and 10-track CD are bound to elate Nicks' fans, who will delight in her performances of beloved originals as well as songs by Dave Matthews, Bonnie Raitt, Tom Petty and Led Zeppelin. I spoke with Nicks in late March, on the day before The Soundstage Sessions was set for release.
Gregg Shapiro: For your first filmed and recorded live show in nearly 25 years, what was it about the Soundstage performance that led you to want to release it as the Live in Chicago DVD?
Stevie Nicks: Well, what happened was in 2005, we got an offer to do four shows at Celine Dion's big theater, the Coliseum at Caesar's [Palace]. I was in Maui, and I got a call from my manager and he said, "I need you to come in and see Celine on this stage because she leaves after the show tonight and Elton [John] comes in tomorrow. So you could see Celine and Elton in two days and decide whether or not you'd like to do this because they've offered you four shows." Getting your foot in the door to play Vegas once in a while is not a bad thing.
So I'm like sorry, I'm on my Rhiannon-quest here in Maui, so I don't think I'll be able to do that. And he goes, "I'll see you Tuesday." So off I went. My guitar player Waddy [Wachtel] and I watched Celine, then we watched Elton, and we're like, "Oh, my God, we can't do this!" You have to build a world here. This is a massive IMAX theater, and the screens are a hundred feet tall. You can't just take your little rock band in there. We're like, "Can we do this?" Elton filmed everything he ever did, and Celine has Cirque du Soleil. What do we have? So we said, call everybody that we know, and we got every ounce of film that was ever taken of us. Every snapshot, every video for every single. We took a bunch of my drawings and photographed them. We got this artist, Sulamith Wulfing, we got permission to use some of her drawings. So we mixed Sulamith's drawings, my drawings, all the film footage, photographs, gave them to our lighting and stage guy and said, "OK, here it is. Build a world."
We did those four shows, and they were great. Then we went to Chicago, rehearsed for three weeks, and filmed it.
The songs on the companion CD The Soundstage Sessions are cleaned up, in that the audience response to the songs was edited out. Why did you choose to go that route?
I said, "Let's try to make this into a little album. Let's pull the 10 most unfamiliar songs. Let's take the Fleetwood Mac songs out, and put in 'If Anyone Falls,' 'Sorcerer,' the Dave Matthews song, and the Bonnie Raitt song. Let's put the unfamiliar things from the show on the disc, take the applause off, go to Nashville and redo some vocals, add some strings, and make this a distinctly different piece of work that can go out along with this DVD."
Your song "Landslide" has been covered by Dixie Chicks, Smashing Pumpkins, and Ann Hampton Callaway. How do you feel when you hear other people's interpretations of that song?
I love it when people take it upon themselves to interpret something. It's no different, really, than me trying to interpret "Crash into Me" by Dave Matthews. Who would have ever thought that I would do that? So who would ever think that people would try to do "Landslide?" Because most people would be like, "Oh, that's a Stevie Nicks song, I can't do that." The fact that somebody is brave enough to do that is great! Every time somebody does "Landslide," it takes my music and spreads it out over the world.
Your songs "Edge of 17" and "Gypsy" inspired the gay coming-of-age movies Edge of Seventeen and Gypsy 83. Have always been aware of your gay following?
I became aware of it with Night of a Thousand Stevies . I am thrilled and honored that the gay community backs my music. I always kid that one day, all you Night of a Thousand Stevies people, one day I'll be there, in complete dress, and you won't know it. I'll be hulking around somewhere, standing behind you, so be careful what you say, because I could be standing next to you at any moment!


text:
Home chess Hungary's "Chess Palace" helps kids to learn and play
Hungary's "Chess Palace" helps kids to learn and play
Chess pieces used to teach skills from maths to memory
sunday chess
* Varied-size chess pieces have names, are like friends
* In Hungary chess is played even in hot-spring baths
By Sandor Peto
BUDAPEST, Oct 24 (Reuters) – Ten-year-old Tamas Katona hopes one day to be a chess champion, but in the meantime his love of the game is helping him to master the skills that should help him in school and later life.
The boy lives in Hungary where the world's best female chess player, Judit Polgar, has turned a school into "chess wonderland" catering precisely for students such as Katona.
Polgar and her two sisters – Zsuzsa (Susan) and Zsofia (Sofia) – won the 1988 Chess Olympiad for Hungary's female team, ending Soviet dominance. Judit Polgar joined men's tournaments and became one of the top players in the world, demolishing the myth that chess is the mental sport of smart men.
These days Polgar, who has two children, spends much of her time implementing a special teaching programme called the "Chess Palace" that puts chess thinking at the heart of learning.
"We don't want to raise chess players here, but we'd like to use chess to teach children … to think logically and be able to use that skill in their everyday lives," Polgar said.
In the Chess Palace – as in Lewis Carroll's "Through the Looking-Glass" – the pieces come to life. They have names like Jumpy Horse, Boom Rook, Tiny Pawn and are like close friends who guide the children through difficult school subjects.
The pieces range in size from 1 cm (under half an inch) tall to a meter (three feet) in height. Chairs, walls and carpets also sport chess motifs.
The pieces, whose combinations and moves represent mathematical, linguistic or musical patterns, help children develop their skills in chess and in their school studies while making the learning process a more joyous exercise.
"I love this (chess) very much as it's a game and at the same time it teaches me. It's a game of logic that develops the brain in a great way," Katona said.
A few years ago, the Dezso Lemhenyi school – which apart from its use of chess as a teaching tool serves as a normal, full-time primary school – was struggling for survival.
Now teachers come from other parts of Hungary and from the United States and Britain to see the Chess Palace.
Chess is taught in many countries, but not in this way.
The main difference is that in the Hungarian version all knowledge that children are supposed to learn in school is integrated into a system where the chess pieces act as numbers, letters or even musical notes, depending on the subject taught.
At a class presentation for about 15 teachers, seven-year-olds moved so fast from one exercise to another it was difficult to follow what subject they were practising.
"This sword costs 17 chess thalers (dollars). What do you think we should pay for it, Csongor?" the teacher asks a boy.
"Two rooks and a knight," the boy replies promptly, then pauses for a second, computing the value assigned to each chess piece in the game. "And a bishop and a pawn," he quickly added.
The exercises also help develop memory. At the presentation the children put 16 pieces on the board randomly, and then posed questions to two boys who turned away from the board.
"How many pieces are on the white diagonal line (across the chess board)?" a girl asked. "Three," came the correct response.
Polgar has produced a Chessplayground application on iPad in which children arrive on a "Chess Planet" via a spaceship.
Chess helps children learn by playing and building on their interests in the visual culture of the digital age, Polgar said after a lesson.
"It is a complicated sport and in this respect that is very good. It has six different pieces that move in six different ways, so they can combine (them) into various games," she said.
Hungary, where the game is played everywhere, even on floating chessboards in Budapest's famous hot-spring baths, has integrated chess into the national curriculum from September.
"It may be a strange contrast that I never went to school and now we launch a school programme," said Polgar, who was home-educated by her father who had wanted to prove that with focused education kids can get to the top in anything, even chess.
"This is different as I am professional… The goal here is learning through chess rather than learning how to play chess." (Editing by Michael Roddy and Gareth Jones)
Previous articleĐiều lệ Giải vô địch cờ Vua nhanh HAPPY SUNDAY lần II – Tháng 10/ 2013
Next articleMighty Underdogs of the European Chess Club Cup
https://sunday.b1u.org/
Sunday chess TV
How Many Chess Players Are There In The World?
Why Russians Are Good At Chess, And Why It Helps To Know That
America's long wait for Bobby Fischer-like chess champion just got longer


In this week's Out On The Street for Out Magazine, I found this look on the border of Chelsea and the MeatPacking District that shows us how a denim jacket can be styled to be business appropriate. See the full look on Out.com, and check out more street style on Vee Travels.
Posted on September 19, 2013, in Fashion, Street Style and tagged Denim, Ralph Lauren, Street Style. Bookmark the permalink.	Leave a comment.


text:
The Sanaa school shooting was a school shooting where 6 people were killed by Mohammad Ahman al-Nazari in Sanaa, Yemen on 30 March 1997. Nazari was convicted for the killings and sentenced to death. He was executed a week later.

Background
Mohammad Ahman al-Nazari was a 48-year-old resident of Sanaa, Yemen, and a veteran of the Soviet–Afghan War, where he had fought in the Mujahideen against the Soviet Union during their invasion of Afghanistan. Nazari's five children attended the Tala'i Private School in the Asbahi neighborhood of Sana'a, where it was alleged that one of his daughters had been molested by the school administrator, despite there being no evidence found to confirm this. Nazari had also previously been employed as a bus driver for Tala'i Private School and the nearby Musa Bin Nusayr School, but was fired for unknown reasons some time before the shooting.

Shooting
Armed with an illegally obtained Kalashnikov assault rifle, Nazari waited at the school for the headmistress and killed her by shooting her in the head. After killing a cafeteria worker and injuring a bus driver who came to help, Nazari entered the school building and walked from classroom to classroom, shooting indiscriminately at teachers and students. Subsequently, he went to nearby Musa Bin Nusayr School, where he continued his shooting rampage.

Arrest and conviction
Nazari killed a total of six people and wounded 12 others before he was eventually injured and arrested by police. After officially being declared sane, Nazari (whose name was also reported as being Hassan Ali al-Baadani or Muhammad Ahmad al-Naziri) was taken to trial where he was found guilty for the six murders, and sentenced to death the next day. Nazari's daughters had fought against the courts to appeal against their father's execution but lost.

Execution
On 5 April 1997, Nazari was executed by firing squad with five shots in the chest, in an empty lot located between the two schools where he had committed the shootings. After his execution, the initial sentence for Nazari's corpse to be crucified in a public area for three days was repealed, instead the corpse was kicked to a pulp by angry citizens and burned in the streets of Sanaa

The daughter who was allegedly raped by the school administrator committed suicide five years later, while Nazari's other four children reportedly all died in a train accident in 2006.

Victims
Asma Abd al-Bari, headmistress of Tala'i school
Muhammad Yahya al-Ulufi, teacher at Tala'i school
Husayn Ali Qa'id al-Ba'dani
Ali Muhammad Muqbil al-Awadi
Imad Muhammad al-Raymi
Unidentified student

External links
Gunman kills eight at two schools in Yemen, CNN (March 30, 1997)
Yemen - Gunman goes on shooting spree in schools, Associated Press (March 31, 1997) (Video)
Yemen - Trial of gunman, Associated Press (April 2, 1997) (Video)

See also

 List of massacres in Yemen

References

Massacres in 1997
Mass murder in 1997
Man-made disasters in Yemen
School massacres
Deaths by firearm in Yemen
20th century in Sanaa
Massacres in Yemen
School shootings in Asia
Mass shootings in Yemen
1997 in Yemen
March 1997 events in Asia
1997 murders in Yemen
Crime in Sanaa

redpajama_set_name: RedPajamaWikipedia


Stop rust in its tracks! Our Silver Rust Encapsulator has been reformulated with TWICE the corrosion resistance!
15-oz. aerosol covers about 10 sq. ft.
You thought it was good before...wait 'til you try this Rust Encapsulator! It seals and stops rust and corrosion from spreading, but it performs even better than our original formula. Tested against well-known brands, the Eastwood Rust Encapsulator has proven to be superior in sunlight resistance, preventing rust creep, and overall durability.
Low 3-5% gloss Silver Rust Encapsulator. As easy to apply and as durable as our popular Red and Black. Perfect under metallic and gray finishes.
Use a wire brush to remove loose rust, scale and paint, and remove dust, grease and oil deposits. Feather surrounding paint with 220-grit sandpaper. Shake can for at least 2 minutes once the mixing ball starts to rattle. Hold the Rust Encapsulator can 10-12" above surface as you spray. A single coat dries to the touch in 20 minutes, and is thoroughly dry in 3-4 hours at 68 degreesF. For greater durability, a second coat can be applied 1 hour after the first. Allow 6-8 hours after the last coat before applying topcoat. Use over or under body fillers.
Work in a well-ventilated area when applying this product. The use of a respirator is recommended. Shake vigorously for 2 minutes before spraying.
(Q) Can Rust Encapsulator be applied with the Undercoating System?
(A) Technically, yes, but this application isn't recommended because Rust Encapsulator requires surface to be free of grease, oil, and loose rust. The best product to coat inside box sections is the 16017ZP Heavy-Duty Anti-Rust (Qt.). This waxy, oily product flows into pinch welds and through rust to seal surfaces from contact with moisture and air, but cannot be painted over, so it's only suitable for inside box sections that don't show. Use lacquer thinner for cleanup.
In places where little or no surface prep can be done, our Internal Frame Coating or Heavy-Duty Anti-Rust (16017ZP) is actually a better choice for applying into blind areas such as box sections.
Want 3 Times More Rust Protection?


text:
Hamann Classic Cars | Salon Retromobile, Paris 2020
post-template-default,single,single-post,postid-1956,single-format-standard,ajax_fade,page_not_loaded,,qode_grid_1300,footer_responsive_adv,qode-content-sidebar-responsive,qode-theme-ver-17.2,qode-theme-bridge,wpb-js-composer js-comp-ver-5.6,vc_responsive
Salon Retromobile, Paris 2020
16 Feb Salon Retromobile, Paris 2020
Posted at 03:20h in Exhibition	by
We returned after an exciting week in Paris. It was the very first time that I had my own stand at Salon Retromobile. We showed ten cars on 205 sqm in the heart of the main exhibition hall Pavillion 1. I could have not done it without Hadrien Berghmans who has joined my team in December of 2019. He was of tremendous help in the sometimes frustrating preparations prior to this premier classic car trade show attracting collectors and enthusiasts from across the world. I invited my friends from the Bernina Gran Turismo hill climb, which I am a proud sponsor of, to introduce their event on our stand. They brought an Audi Sport Quattro, one of only 224 built and of only 170 cars sold to private customers in 1985, which had competed in this exclusive hill climb outside of St. Moritz/Switzerland several times.
In addition to this rare Audie which wrote Motors Sport history in the 80's we had the following cars on our stand:
Jaguar XK 120 Jabbekes world speed record setting Prototype. Most likely the most important Jaguar outside of the company's Le Mans winning C- and D-Types. This very car set the land speed record for the flying mile of 172mph (277kmh) with Norman Dewis at the wheel.
Jaguar E-Type Roadster, A desirable very early car with outside bonnet latches and welded louvers which found a new home in Monaco.
Ferrari 342 America PF Coupe Speciale, one of only three such cars built with special one of features including competition spec engine with increase horsepower as only found in the 340 America competition cars. This car left also for a new home within a prominent collection after the show.
Ferrari 512 BBi, a local car from Paris in excellent condition which found a new home short after Retromobile closed its doors.
Lamborghini Miura SV with rare split sump lubrication for engine and gearbox and factory air condition.
Maserati 250F, the ultimate GP race car of the 50's. An ex works fatory team car with long and impressive race history and most likely the most original 250F in existence as it has spent 45 years in the Grand Prix Museum at Donington Park in the UK and the last ten years in the Scottsdale Automobile Museum. In Arizona.
Maserati 3500 GT injezione Vignale Spider. A fabulously restored example of the desirable 2nd Series with front and rear disc brakes and 5-speed ZF gearbox. This car was restored by the best shops in Italy and is also fitted with an optional Hardtop.
Pegaso Z-102B Saoutchik Coupe. One of only five such cars built with striking coach work by the Paris based company Saoutchik. The car had just arrived in time by airplane from California to be displayed on our stand.
Porsche Carrera 2 GT/GS Coupe in Race trim. A GT Coupe upgraded with 160 bhp GS engine and light weight features such as aluminum doors and hood, plexiglas side windows, roll bar and 90 liter fuel tanks for Rallies.
Long term clients and friends did visit our stand as well as many collectors from across the globe we haven't met before.
As my feet seemed to be welded to the floor of our stand I was not able to walk around and visit other colleagues' stands for a visit as in previous years. There were however once again a great selection of cars on display proving that Retromobile is by far the number classic car tradeshow in the world's when it comes to the quality of the cars exhibited or offered for sale.
Despite long hours from 10:00 o'clock in the morning until 10:00 o'clock at night on some days it was a very rewarding experience and we plan to return in 2021.
The excitement of highly exclusive classic sport cars in your inbox
In loving memory title
Nicklas E. Hamann
March 1992 - April 2015
Thank you for sharing all your love with us
and giving so much joy to the world.


Error (International HeraldTribune, Neil MacFarquhar, 9/16/09): The [Goldstone] report did not take a position on the hotly contested number of civilian casualties during the Gaza war. It noted that they range from the Israeli government figure of 1,166 to the Hamas figure of 1,444, with a couple of humanitarian organizations' estimates somewhere between.
Correction (9/25/09): An article Sept. 16 on casualties in the Gaza Strip war said 1,116 [sic] Palestinian civilians had been killed in the fighting. The figure actually covers the overall number of Palestinian casualties: civilians, combatants and unknowns. The proportion of civilian casualties remains in dispute.
Just to be clear, 1,166 refers to Israel's number for overall Palestinian casualties during Operation Cast Lead. Additionally, it should be noted that Hamas' number of 1,444 relates to the group's claim about the total number of Palestinian casualties in the Gaza fighting, civilians and combatants alike.


Did you know termite damage costs hundreds of millions of dollars in Australia each year? According to CSIRO studies, one in three houses will be attacked or damaged by termites at some point, often causing serious ruin to the foundations of a building before being visually detected. A termite-infested house may seem perfectly fine for years, but by the time the damage is realised, your home may have developed major structural damage.
Termites play an important role in nature, feeding off plant debris and converting it into fertile organic matter; but unfortunately, their diet also includes the timber used to build your home.
The CSIRO recommends yearly inspection by pest control specialists; depending on the termite risk of your house and its area, more frequent inspections may be required. If termites are found, then chemical extermination treatment is required.
To minimise the risk of infestation, many homeowners take the proactive step of defending their home with early-warning monitoring and baiting systems, or have their homes chemically treated to prevent termites.
Termite monitoring involves setting up termite stations with timber interceptors in the soil around your home, which are inspected until termites are intercepted. Baiting involves mixing a termite food source with a growth regulator, which termites can take back to the colony to exterminate it. Monitoring and baiting isn't foolproof; it's possible for termites to enter a home undetected without ending up in the stations, however, these steps do significantly minimise the likelihood of attack on the home by reducing the number of termite colonies in a given area. This ensures the termite pressure the structure is under is greatly reduced. Termite monitoring or baiting systems are ideal form of protection for those difficult building types that are unable to be thoroughly protected chemically.
Chemical treatment to prevent termite entry into a building is very effective, however needs to be re-applied approx every 5 years to maintain effectiveness. Pre-treated timbers are being used increasingly in new building construction; these timbers are unappealing to termites, alleviating the need for ongoing chemical sprays to protect the structural elements of the building. It also reduces the impact of hard-to-reach areas of a home which may be difficult to reach for chemical re-treatment.
However, re-application of a termite barrier is still important if we are to ensure protection of timber floors, cupboards, and carpentry At The Pest Guys, we offer a non-toxic chemical treatment which was formulated from a compound found in a South American plant, Ryania speciose, based on a decade of research. Scientists used this formulation to create an incredibly effective termiticide, Altriset, which has little-to-no effect on other non-target organisms.
An important benefit of using a termiticide like Altriset is that, unlike monitoring and baiting systems, there are no gaps: we'll spray around the entire foundation of your house and stop foraging termites in their tracks!
Altriset will prevent further damage to your home, and within three months the infestation will be fully controlled; termites are poisoned when they tunnel through a 'treated zone'. This compound utilises termite socialising and grooming behaviour, exposing an increasing number of colony members to the same termiticide, eventually ending the infestation. Altriset will be applied to a 15-cm deep trench dug around your home, so in addition to exterminating existing colonies, the soil surrounding your home will carry on being protected for up to seven years. You can rest easy knowing your most valuable asset is safe.
Successful termite treatment requires expert knowledge, training and skills!
In fact, it's crucial you contact pest control professionals straight away upon discovery of any termites in your home and avoid disturbing the infestation in case they flee from the spot to a less accessible part of your home (where an untrained eye could take years to find them).
At The Pest Guys, we know termites better than anyone. We know how they worm into your property, how to eliminate them expertly, and offer a highly effective termiticide that is non-toxic to humans and pets.
We offer a free no-obligation appraisal, and we'd love to talk with you about how we can keep your home termite-free. Contact us today.


You're officially sold on the fact that inbound marketing works for manufacturers. You purchased HubSpot, and you're itching to get started, but where do you start?! There are so many different approaches you can take - from blogging, to lead nurturing, to social media, to creating gated premium offers - it can be overwhelming!
1. Are your only conversion opportunities an RFQ form or Contact Us page?
If you answered yes, then you need to add another conversion opportunity to your website.
Do you have existing content that you can easily gate?
Is there sales content that can be repurposed into an offer?
Can a new Decision stage offer be created?
2. Do you have call-to-actions on highly viewed pages?
If you're just getting started, you want to make sure you spend a lot of time placing your CTAs in places on your website where they'll be seen by a potential prospect (and hopefully click on, then convert).
You can use HubSpot or Google Analytics to view your top-performing website pages.
If you're using HubSpot, click Reports then Page Performance. You'll see a chart and table view like the one below. You can also add the columns CTA views, CTA clicks, and CTA % to see which pages currently have a HubSpot CTA and if it's performing.
You can do this by clicking Edit columns then adding the properties from the left side.
3. Is your email list segmented for better engagement?
Segmentation allows you to send the right people content that aligns more closely with their interests.
A recent HubSpot study shows that targeting emails to certain buyer personas increases email click-through rates 16%.
4. Are you leveraging your social following?
Remember, website traffic from social media and email marketing are two vehicles that you can control.
Have you ever heard of the 10-4-1 rule?
The 10-4-1 rule is a ratio of what types of social posts to post during a 15-post period.
10: Every 10 out of 15 posts should be from third-party sources. You probably think this sounds crazy. Don't worry, you're not alone. Let's think about this for a second. ... You know your persona, and you know the type of content they like to read from trade journals, business publications, newsletters, other blogs, etc., so you're actually doing them a favor by posting all the content they already love on your channel! Plus, your audience will start to see you as a trusted industry adviser.
4: Every 4 out of 15 posts should be your blog posts. Blogging is essential to your inbound marketing strategy, so use social to increase traffic to your blog.
1: If you're adhering to the 10-4-1 rule, you actually have a chance to close a deal. The remaining post is your opportunity to let your social following know how you can help them solve their problem with your product or service. Every 1 out of 15 posts should be a link to a landing page.
The 10-4-1 is a great guideline for mixing your message to not only build your audience but grow your engagement.
Using these tactics will help move your prospect through your sales funnel easier.


Got a question for all you online gamers out there. I'm going to start up Everquest again but on the mac platform and i have two G4s.
G4 700mhz 128ram Geforce2 MX or better.
If all graphics are turned off, and low res possible. Will that G4 450 be able to run EQ? and is there anything i should do to it now that wont cost me anything? like maybe only make the ATA the main HD or leave it raided? The SCSI hd in there now is old and don;t trust it as much. I don;t want to spend any cash on it cause i just bought the DP G4. The thing runs great with OSX too.
So if any of you gamers have any thoughts to set it up or very cheap ways to try and make it stable before EQ hits stores. Would help me out.
¬?I've never played EQ, fraid too since then that's all I'd be doin for the next six weeks or so. Might even cause a D-I-V-O-R-C-E for me to try.
Ya i'm going to try no matter what, but just thought some input would hlp me decide faster.
Think i will redo the HDs and make the ATA the main one. Then cut down all graphics and see what resolution wil be best.
In EQ if you have two accounts and two Comps, you can tade all your junk to another player for more space and to sell while your playing the game. Its a pain with only one comp when i used to have a PC and played EQ. I think starting EQ over again with Macs will be a lot more fun since upgrades are much easier. And to trouble shoot will be much easier to me then those blue screens of death machines.
But once i get it all set up i'll post to let ya guys know how things work out.


Set the mood by dimming the lights and pulling down the shades. South Orange County | lighting control | Looking to create your dream Kamran Home Theater?
Orange County - Need Components? Amplifier, 3D Blu-ray player, Speakers, Tallboy speakers, Center channel speaker - audio visual installation.
Offering: NAUTILUS MEDIA SYSTEMS IN ORANGE COUNTY services in many locations, including: Monarch Beach, CA and surrounding areas.


text:
Legal Technology News & Press
AbacusNext Brings Private Cloud to Canada with Data Center Expansion and Microsoft Certification
March 26, 2018 | Abacus Private Cloud, Press Release
Linkedin Twitter Facebook E-mail
San Diego, CA, March 26, 2018—AbacusNext®, the largest Technology-as-a-Service (TaaS) provider for legal and accounting professionals, today announced, in addition to their existing business software presence, the availability of their fully-managed private cloud solutions and business technology services to the Canadian market. Utilizing data centers in Toronto and Montréal operated by Zayo, a global communications infrastructure provider, AbacusNext is proud to offer Abacus Private Cloud (APC) to Canadian professionals, in addition to the full suite of Microsoft products and services as an official Microsoft Cloud Solutions Provider (CSP).
"Partnering with Zayo and receiving CSP certification from Microsoft Canada are two major steps toward expanding our Canadian presence and bringing the benefits of Abacus Private Cloud to more businesses across North America," said Jerome Fodor, CTO of AbacusNext. "Our shared commitment to data security, business continuity and delivering unmatched client experiences make both Zayo and Microsoft a natural fit for AbacusNext in our mission to improve the lives of professionals with technology."
AbacusNext's Canadian headquarters in Toronto will be expanded to house local support for Canadian clients wanting to take advantage of Abacus Private Cloud's best-in-class security and performance while maintaining data residency and compliance with Canadian privacy regulations (PIPEDA).
"We're excited to partner with AbacusNext to offer their clients the fastest, most secure cloud infrastructure available," saidTJ Karklins, senior vice president of Zayo's zColo business segment. "Our Toronto and Montréal data centers, combined with AbacusNext's suite of compliance-ready technology solutions, will provide the access, speed and scalability Canadian businesses desperately need."
Membership in the Microsoft Cloud Solution Provider program allows AbacusNext to offer clients direct billing, combined offers, and directly provisioned, managed and supported Microsoft products and services.
"The Cloud Solution Provider program puts our partners at the center of the customer relationship," said Gavriella Schuster, Corporate Vice President, Worldwide Channels & Programs at Microsoft Corp. "Partners who sell through CSP have demonstrated dedication to helping our mutual customers drive their digital transformation."
About Zayo Group
Zayo Group Holdings, Inc. (NYSE: ZAYO) provides communications infrastructure services, including fiber and bandwidth connectivity, colocation and cloud infrastructure to the world's leading businesses. Customers include wireless and wireline carriers, media and content companies and finance, healthcare and other large enterprises. Zayo's 122,000-mile network in North America and Europe includes extensive metro connectivity to thousands of buildings and data centers. In addition to high-capacity dark fiber, wavelength, Ethernet and other connectivity solutions, Zayo offers colocation and cloud infrastructure in its carrier-neutral data centers. For more information, visit zayo.com.
About AbacusNext
As the largest technology provider for the professional services sector, AbacusNext helps legal and accounting professionals achieve ultimate success and peace of mind through the delivery of a complete suite of compliance-ready technology solutions designed to support a secure and cloud-enabled practice at a cost they can afford. Headquartered in San Diego, California, and backed by private investment with Providence Equity, AbacusNext delivers products and services to over 12,000 clients worldwide.
About Providence Equity
Providence is a premier global asset management firm with $45 billion in assets under management across complementary private equity and credit businesses. Providence pioneered a sector-focused approach to private equity investing with the vision that a dedicated team of industry experts could build exceptional companies of enduring value. Since the firm's inception in 1989, Providence has invested in more than 150 companies and is the leading equity investment firm focused on the media, communications, education and information industries. Providence is headquartered in Providence, Rhode Island, and has offices in New York, London, Hong Kong, Singapore and New Delhi. For more information, please visit www.provequity.com.
press@abacusnext.com
AbacusNext Announces AbacusLaw and HotDocs Integration
AbacusNext, a leading technology provider for legal, accounting and compliance-focused professionals, today announced the company has launched the integration between HotDocs and AbacusLaw. The integration, which was originally previewed at Legalweek 2020, provides firms with the ability to automatically assemble error-free documents using the client, calendar and case information already in the AbacusLaw system....
AbacusNext to Preview AbacusLaw and HotDocs Integration at Legalweek New York
AbacusNext, a leading technology provider for legal, accounting and compliance-focused professionals, today announced the company will be previewing the AbacusLaw and HotDocs integration at Legalweek New York taking place February 4-6. The integration provides firms with the ability to automatically assemble error-free documents using the client, calendar and case information already in the AbacusLaw system. Product experts will be showcasing and demoing this integration at booth #220....


I'm a 26 year old woman and I don't have an Amazon Echo.
This Christmas, an Amazon Echo was at the top of my 80-year old grandfather's wish list.
In an unexpected twist of events, Alexa has more relevance for my grandad than for me.
Alexa's capabilities have struck a tipping point with an older generation, where the features meet key needs, and the voice-activated method allows for accessibility.
The reason I haven't (yet) brought Alexa's dulcet tones into my home is not because the Echo proposition lacks resonance with me, but because I have already met these needs with other products.
On the other hand, until this Christmas my grandad didn't own technology to simplify these tasks. The need was there, but he would rather carry on without than have to deal with the hassle of working out which product to buy and dealing with complicated set-ups.
Enter Echo. One device equipped with all of these key features, and all you have to do is plug it in and speak. No fancy controls or operating systems to negotiate.
The Echo also has a number of benefits that particularly lend themselves to an older demographic. Thinking functionally, this includes being able to set daily reminders to take pills or being able to get the latest headlines without having to locate the newspaper or TV remote.
More emotionally, it is easy to see how Alexa could play a role in combatting loneliness. Whether using Alexa's skills to have an audiobook or music on in the background, or asking her questions, the aural nature of interacting with the Echo could certainly help meet the need for company.
With 'brand sound' becoming increasingly important, and most people being a tech adopter to some degree, brands across all sectors, from healthcare to entertainment, should consider the role of voice activated devices to serve the real and diverse needs of their customers.


Another event that happened in the past year is that my team was re-org'd into the Microsoft Dynamics Ax product group. This happened last spring and we joined in the midst of the 5.0 release cycle. We immediately picked up some critical features for the release. Needless to say, it's been rather hectic.
I've learned a lot about both the testing discipline and Ax in the past few months. Those two topics, especially where they overlap, is what I want to start blogging about in the next few months. As before, I also intend to sprinkle in some Fargo related topics.
The challenge is finding the time to do it, but this post is the first step!


text:
#include <rtthread.h>
#include <rthw.h>

rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];
rt_uint32_t rt_thread_ready_priority_group;
#if RT_THREAD_PRIORITY_MAX > 32
/* Maximum priority level, 256 */
rt_uint8_t rt_thread_ready_table[32];
#endif /* RT_THREAD_PRIORITY_MAX > 32 */

#ifndef RT_USING_SMP
extern volatile rt_uint8_t rt_interrupt_nest;
static rt_int16_t rt_scheduler_lock_nest;
struct rt_thread *rt_current_thread = RT_NULL;
rt_uint8_t rt_current_priority;
#endif /* RT_USING_SMP */

#ifndef __on_rt_scheduler_hook
    #define __on_rt_scheduler_hook(from, to)        __ON_HOOK_ARGS(rt_scheduler_hook, (from, to))
#endif
#ifndef __on_rt_scheduler_switch_hook
    #define __on_rt_scheduler_switch_hook(tid)      __ON_HOOK_ARGS(rt_scheduler_switch_hook, (tid))
#endif

#if defined(RT_USING_HOOK) && defined(RT_HOOK_USING_FUNC_PTR)
static void (*rt_scheduler_hook)(struct rt_thread *from, struct rt_thread *to);
static void (*rt_scheduler_switch_hook)(struct rt_thread *tid);

/**
 * @addtogroup Hook
 */

/**@{*/

/**
 * @brief This function will set a hook function, which will be invoked when thread
 *        switch happens.
 *
 * @param hook is the hook function.
 */
void rt_scheduler_sethook(void (*hook)(struct rt_thread *from, struct rt_thread *to))
{
    rt_scheduler_hook = hook;
}

/**
 * @brief This function will set a hook function, which will be invoked when context
 *        switch happens.
 *
 * @param hook is the hook function.
 */
void rt_scheduler_switch_sethook(void (*hook)(struct rt_thread *tid))
{
    rt_scheduler_switch_hook = hook;
}

/**@}*/
#endif /* RT_USING_HOOK */

#ifdef RT_USING_OVERFLOW_CHECK
static void _scheduler_stack_check(struct rt_thread *thread)
{
    RT_ASSERT(thread != RT_NULL);

#ifdef ARCH_CPU_STACK_GROWS_UPWARD
    if (*((rt_uint8_t *)((rt_ubase_t)thread->stack_addr + thread->stack_size - 1)) != '#' ||
#else
    if (*((rt_uint8_t *)thread->stack_addr) != '#' ||
#endif /* ARCH_CPU_STACK_GROWS_UPWARD */
        (rt_ubase_t)thread->sp <= (rt_ubase_t)thread->stack_addr ||
        (rt_ubase_t)thread->sp >
        (rt_ubase_t)thread->stack_addr + (rt_ubase_t)thread->stack_size)
    {
        rt_base_t level;

        rt_kprintf("thread:%s stack overflow\n", thread->name);

        level = rt_hw_interrupt_disable();
        while (level);
    }
#ifdef ARCH_CPU_STACK_GROWS_UPWARD
    else if ((rt_ubase_t)thread->sp > ((rt_ubase_t)thread->stack_addr + thread->stack_size))
    {
        rt_kprintf("warning: %s stack is close to the top of stack address.\n",
                   thread->name);
    }
#else
    else if ((rt_ubase_t)thread->sp <= ((rt_ubase_t)thread->stack_addr + 32))
    {
        rt_kprintf("warning: %s stack is close to end of stack address.\n",
                   thread->name);
    }
#endif /* ARCH_CPU_STACK_GROWS_UPWARD */
}
#endif /* RT_USING_OVERFLOW_CHECK */

/*
 * get the highest priority thread in ready queue
 */
#ifdef RT_USING_SMP
static struct rt_thread* _scheduler_get_highest_priority_thread(rt_ubase_t *highest_prio)
{
    struct rt_thread *highest_priority_thread;
    rt_ubase_t highest_ready_priority, local_highest_ready_priority;
    struct rt_cpu* pcpu = rt_cpu_self();
#if RT_THREAD_PRIORITY_MAX > 32
    rt_ubase_t number;

    number = __rt_ffs(rt_thread_ready_priority_group) - 1;
    highest_ready_priority = (number << 3) + __rt_ffs(rt_thread_ready_table[number]) - 1;
    number = __rt_ffs(pcpu->priority_group) - 1;
    local_highest_ready_priority = (number << 3) + __rt_ffs(pcpu->ready_table[number]) - 1;
#else
    highest_ready_priority = __rt_ffs(rt_thread_ready_priority_group) - 1;
    local_highest_ready_priority = __rt_ffs(pcpu->priority_group) - 1;
#endif /* RT_THREAD_PRIORITY_MAX > 32 */

    /* get highest ready priority thread */
    if (highest_ready_priority < local_highest_ready_priority)
    {
        *highest_prio = highest_ready_priority;
        highest_priority_thread = rt_list_entry(rt_thread_priority_table[highest_ready_priority].next,
                                  struct rt_thread,
                                  tlist);
    }
    else
    {
        *highest_prio = local_highest_ready_priority;
        highest_priority_thread = rt_list_entry(pcpu->priority_table[local_highest_ready_priority].next,
                                  struct rt_thread,
                                  tlist);
    }

    return highest_priority_thread;
}
#else
static struct rt_thread* _scheduler_get_highest_priority_thread(rt_ubase_t *highest_prio)
{
    struct rt_thread *highest_priority_thread;
    rt_ubase_t highest_ready_priority;

#if RT_THREAD_PRIORITY_MAX > 32
    rt_ubase_t number;

    number = __rt_ffs(rt_thread_ready_priority_group) - 1;
    highest_ready_priority = (number << 3) + __rt_ffs(rt_thread_ready_table[number]) - 1;
#else
    highest_ready_priority = __rt_ffs(rt_thread_ready_priority_group) - 1;
#endif /* RT_THREAD_PRIORITY_MAX > 32 */

    /* get highest ready priority thread */
    highest_priority_thread = rt_list_entry(rt_thread_priority_table[highest_ready_priority].next,
                              struct rt_thread,
                              tlist);

    *highest_prio = highest_ready_priority;

    return highest_priority_thread;
}
#endif /* RT_USING_SMP */

/**
 * @brief This function will initialize the system scheduler.
 */
void rt_system_scheduler_init(void)
{
#ifdef RT_USING_SMP
    int cpu;
#endif /* RT_USING_SMP */
    rt_base_t offset;

#ifndef RT_USING_SMP
    rt_scheduler_lock_nest = 0;
#endif /* RT_USING_SMP */

    RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("start scheduler: max priority 0x%02x\n",
                                      RT_THREAD_PRIORITY_MAX));

    for (offset = 0; offset < RT_THREAD_PRIORITY_MAX; offset ++)
    {
        rt_list_init(&rt_thread_priority_table[offset]);
    }
#ifdef RT_USING_SMP
    for (cpu = 0; cpu < RT_CPUS_NR; cpu++)
    {
        struct rt_cpu *pcpu =  rt_cpu_index(cpu);
        for (offset = 0; offset < RT_THREAD_PRIORITY_MAX; offset ++)
        {
            rt_list_init(&pcpu->priority_table[offset]);
        }

        pcpu->irq_switch_flag = 0;
        pcpu->current_priority = RT_THREAD_PRIORITY_MAX - 1;
        pcpu->current_thread = RT_NULL;
        pcpu->priority_group = 0;

#if RT_THREAD_PRIORITY_MAX > 32
        rt_memset(pcpu->ready_table, 0, sizeof(pcpu->ready_table));
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
    }
#endif /* RT_USING_SMP */

    /* initialize ready priority group */
    rt_thread_ready_priority_group = 0;

#if RT_THREAD_PRIORITY_MAX > 32
    /* initialize ready table */
    rt_memset(rt_thread_ready_table, 0, sizeof(rt_thread_ready_table));
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
}

/**
 * @brief This function will startup the scheduler. It will select one thread
 *        with the highest priority level, then switch to it.
 */
void rt_system_scheduler_start(void)
{
    struct rt_thread *to_thread;
    rt_ubase_t highest_ready_priority;

    to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);

#ifdef RT_USING_SMP
    to_thread->oncpu = rt_hw_cpu_id();
#else
    rt_current_thread = to_thread;
#endif /* RT_USING_SMP */

    rt_schedule_remove_thread(to_thread);
    to_thread->stat = RT_THREAD_RUNNING;

    /* switch to new thread */
#ifdef RT_USING_SMP
    rt_hw_context_switch_to((rt_ubase_t)&to_thread->sp, to_thread);
#else
    rt_hw_context_switch_to((rt_ubase_t)&to_thread->sp);
#endif /* RT_USING_SMP */

    /* never come back */
}

/**
 * @addtogroup Thread
 */

/**@{*/

#ifdef RT_USING_SMP
/**
 * @brief This function will handle IPI interrupt and do a scheduling in system.
 *
 * @param vector is the number of IPI interrupt for system scheduling.
 *
 * @param param is not used, and can be set to RT_NULL.
 *
 * @note this function should be invoke or register as ISR in BSP.
 */
void rt_scheduler_ipi_handler(int vector, void *param)
{
    rt_schedule();
}

/**
 * @brief This function will perform one scheduling. It will select one thread
 *        with the highest priority level in global ready queue or local ready queue,
 *        then switch to it.
 */
void rt_schedule(void)
{
    rt_base_t level;
    struct rt_thread *to_thread;
    struct rt_thread *current_thread;
    struct rt_cpu    *pcpu;
    int cpu_id;

    /* disable interrupt */
    level  = rt_hw_interrupt_disable();

    cpu_id = rt_hw_cpu_id();
    pcpu   = rt_cpu_index(cpu_id);
    current_thread = pcpu->current_thread;

    /* whether do switch in interrupt */
    if (pcpu->irq_nest)
    {
        pcpu->irq_switch_flag = 1;
        rt_hw_interrupt_enable(level);
        goto __exit;
    }

#ifdef RT_USING_SIGNALS
    if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_SUSPEND)
    {
        /* if current_thread signal is in pending */

        if ((current_thread->stat & RT_THREAD_STAT_SIGNAL_MASK) & RT_THREAD_STAT_SIGNAL_PENDING)
        {
            rt_thread_resume(current_thread);
        }
    }
#endif /* RT_USING_SIGNALS */

    if (current_thread->scheduler_lock_nest == 1) /* whether lock scheduler */
    {
        rt_ubase_t highest_ready_priority;

        if (rt_thread_ready_priority_group != 0 || pcpu->priority_group != 0)
        {
            to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);
            current_thread->oncpu = RT_CPU_DETACHED;
            if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
            {
                if (current_thread->current_priority < highest_ready_priority)
                {
                    to_thread = current_thread;
                }
                else if (current_thread->current_priority == highest_ready_priority && (current_thread->stat & RT_THREAD_STAT_YIELD_MASK) == 0)
                {
                    to_thread = current_thread;
                }
                else
                {
                    rt_schedule_insert_thread(current_thread);
                }
                current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
            }
            to_thread->oncpu = cpu_id;
            if (to_thread != current_thread)
            {
                /* if the destination thread is not the same as current thread */
                pcpu->current_priority = (rt_uint8_t)highest_ready_priority;

                RT_OBJECT_HOOK_CALL(rt_scheduler_hook, (current_thread, to_thread));

                rt_schedule_remove_thread(to_thread);
                to_thread->stat = RT_THREAD_RUNNING | (to_thread->stat & ~RT_THREAD_STAT_MASK);

                /* switch to new thread */
                RT_DEBUG_LOG(RT_DEBUG_SCHEDULER,
                        ("[%d]switch to priority#%d "
                         "thread:%.*s(sp:0x%08x), "
                         "from thread:%.*s(sp: 0x%08x)\n",
                         pcpu->irq_nest, highest_ready_priority,
                         RT_NAME_MAX, to_thread->name, to_thread->sp,
                         RT_NAME_MAX, current_thread->name, current_thread->sp));

#ifdef RT_USING_OVERFLOW_CHECK
                _scheduler_stack_check(to_thread);
#endif /* RT_USING_OVERFLOW_CHECK */

                RT_OBJECT_HOOK_CALL(rt_scheduler_switch_hook, (current_thread));

                rt_hw_context_switch((rt_ubase_t)&current_thread->sp,
                        (rt_ubase_t)&to_thread->sp, to_thread);
            }
        }
    }

    /* enable interrupt */
    rt_hw_interrupt_enable(level);

#ifdef RT_USING_SIGNALS
    /* check stat of thread for signal */
    level = rt_hw_interrupt_disable();
    if (current_thread->stat & RT_THREAD_STAT_SIGNAL_PENDING)
    {
        extern void rt_thread_handle_sig(rt_bool_t clean_state);

        current_thread->stat &= ~RT_THREAD_STAT_SIGNAL_PENDING;

        rt_hw_interrupt_enable(level);

        /* check signal status */
        rt_thread_handle_sig(RT_TRUE);
    }
    else
    {
        rt_hw_interrupt_enable(level);
    }
#endif /* RT_USING_SIGNALS */

__exit:
    return ;
}
#else
/**
 * @brief This function will perform scheduling once. It will select one thread
 *        with the highest priority, and switch to it immediately.
 */
void rt_schedule(void)
{
    rt_base_t level;
    struct rt_thread *to_thread;
    struct rt_thread *from_thread;

    /* disable interrupt */
    level = rt_hw_interrupt_disable();

    /* check the scheduler is enabled or not */
    if (rt_scheduler_lock_nest == 0)
    {
        rt_ubase_t highest_ready_priority;

        if (rt_thread_ready_priority_group != 0)
        {
            /* need_insert_from_thread: need to insert from_thread to ready queue */
            int need_insert_from_thread = 0;

            to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);

            if ((rt_current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
            {
                if (rt_current_thread->current_priority < highest_ready_priority)
                {
                    to_thread = rt_current_thread;
                }
                else if (rt_current_thread->current_priority == highest_ready_priority && (rt_current_thread->stat & RT_THREAD_STAT_YIELD_MASK) == 0)
                {
                    to_thread = rt_current_thread;
                }
                else
                {
                    need_insert_from_thread = 1;
                }
                rt_current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
            }

            if (to_thread != rt_current_thread)
            {
                /* if the destination thread is not the same as current thread */
                rt_current_priority = (rt_uint8_t)highest_ready_priority;
                from_thread         = rt_current_thread;
                rt_current_thread   = to_thread;

                RT_OBJECT_HOOK_CALL(rt_scheduler_hook, (from_thread, to_thread));

                if (need_insert_from_thread)
                {
                    rt_schedule_insert_thread(from_thread);
                }

                rt_schedule_remove_thread(to_thread);
                to_thread->stat = RT_THREAD_RUNNING | (to_thread->stat & ~RT_THREAD_STAT_MASK);

                /* switch to new thread */
                RT_DEBUG_LOG(RT_DEBUG_SCHEDULER,
                        ("[%d]switch to priority#%d "
                         "thread:%.*s(sp:0x%08x), "
                         "from thread:%.*s(sp: 0x%08x)\n",
                         rt_interrupt_nest, highest_ready_priority,
                         RT_NAME_MAX, to_thread->name, to_thread->sp,
                         RT_NAME_MAX, from_thread->name, from_thread->sp));

#ifdef RT_USING_OVERFLOW_CHECK
                _scheduler_stack_check(to_thread);
#endif /* RT_USING_OVERFLOW_CHECK */

                if (rt_interrupt_nest == 0)
                {
                    extern void rt_thread_handle_sig(rt_bool_t clean_state);

                    RT_OBJECT_HOOK_CALL(rt_scheduler_switch_hook, (from_thread));

                    rt_hw_context_switch((rt_ubase_t)&from_thread->sp,
                            (rt_ubase_t)&to_thread->sp);

                    /* enable interrupt */
                    rt_hw_interrupt_enable(level);

#ifdef RT_USING_SIGNALS
                    /* check stat of thread for signal */
                    level = rt_hw_interrupt_disable();
                    if (rt_current_thread->stat & RT_THREAD_STAT_SIGNAL_PENDING)
                    {
                        extern void rt_thread_handle_sig(rt_bool_t clean_state);

                        rt_current_thread->stat &= ~RT_THREAD_STAT_SIGNAL_PENDING;

                        rt_hw_interrupt_enable(level);

                        /* check signal status */
                        rt_thread_handle_sig(RT_TRUE);
                    }
                    else
                    {
                        rt_hw_interrupt_enable(level);
                    }
#endif /* RT_USING_SIGNALS */
                    goto __exit;
                }
                else
                {
                    RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("switch in interrupt\n"));

                    rt_hw_context_switch_interrupt((rt_ubase_t)&from_thread->sp,
                            (rt_ubase_t)&to_thread->sp);
                }
            }
            else
            {
                rt_schedule_remove_thread(rt_current_thread);
                rt_current_thread->stat = RT_THREAD_RUNNING | (rt_current_thread->stat & ~RT_THREAD_STAT_MASK);
            }
        }
    }

    /* enable interrupt */
    rt_hw_interrupt_enable(level);

__exit:
    return;
}
#endif /* RT_USING_SMP */

/**
 * @brief This function checks whether a scheduling is needed after an IRQ context switching. If yes,
 *        it will select one thread with the highest priority level, and then switch
 *        to it.
 */
#ifdef RT_USING_SMP
void rt_scheduler_do_irq_switch(void *context)
{
    int cpu_id;
    rt_base_t level;
    struct rt_cpu* pcpu;
    struct rt_thread *to_thread;
    struct rt_thread *current_thread;

    level = rt_hw_interrupt_disable();

    cpu_id = rt_hw_cpu_id();
    pcpu   = rt_cpu_index(cpu_id);
    current_thread = pcpu->current_thread;

#ifdef RT_USING_SIGNALS
    if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_SUSPEND)
    {
        /* if current_thread signal is in pending */

        if ((current_thread->stat & RT_THREAD_STAT_SIGNAL_MASK) & RT_THREAD_STAT_SIGNAL_PENDING)
        {
            rt_thread_resume(current_thread);
        }
    }
#endif /* RT_USING_SIGNALS */

    if (pcpu->irq_switch_flag == 0)
    {
        rt_hw_interrupt_enable(level);
        return;
    }

    if (current_thread->scheduler_lock_nest == 1 && pcpu->irq_nest == 0)
    {
        rt_ubase_t highest_ready_priority;

        /* clear irq switch flag */
        pcpu->irq_switch_flag = 0;

        if (rt_thread_ready_priority_group != 0 || pcpu->priority_group != 0)
        {
            to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);
            current_thread->oncpu = RT_CPU_DETACHED;
            if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
            {
                if (current_thread->current_priority < highest_ready_priority)
                {
                    to_thread = current_thread;
                }
                else if (current_thread->current_priority == highest_ready_priority && (current_thread->stat & RT_THREAD_STAT_YIELD_MASK) == 0)
                {
                    to_thread = current_thread;
                }
                else
                {
                    rt_schedule_insert_thread(current_thread);
                }
                current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
            }
            to_thread->oncpu = cpu_id;
            if (to_thread != current_thread)
            {
                /* if the destination thread is not the same as current thread */

                pcpu->current_priority = (rt_uint8_t)highest_ready_priority;

                RT_OBJECT_HOOK_CALL(rt_scheduler_hook, (current_thread, to_thread));

                rt_schedule_remove_thread(to_thread);
                to_thread->stat = RT_THREAD_RUNNING | (to_thread->stat & ~RT_THREAD_STAT_MASK);

#ifdef RT_USING_OVERFLOW_CHECK
                _scheduler_stack_check(to_thread);
#endif /* RT_USING_OVERFLOW_CHECK */
                RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("switch in interrupt\n"));

                current_thread->cpus_lock_nest--;
                current_thread->scheduler_lock_nest--;

                RT_OBJECT_HOOK_CALL(rt_scheduler_switch_hook, (current_thread));

                rt_hw_context_switch_interrupt(context, (rt_ubase_t)&current_thread->sp,
                        (rt_ubase_t)&to_thread->sp, to_thread);
            }
        }
    }
    rt_hw_interrupt_enable(level);
}
#endif /* RT_USING_SMP */

/**
 * @brief This function will insert a thread to the system ready queue. The state of
 *        thread will be set as READY and the thread will be removed from suspend queue.
 *
 * @param thread is the thread to be inserted.
 *
 * @note  Please do not invoke this function in user application.
 */
#ifdef RT_USING_SMP
void rt_schedule_insert_thread(struct rt_thread *thread)
{
    int cpu_id;
    int bind_cpu;
    rt_uint32_t cpu_mask;
    rt_base_t level;

    RT_ASSERT(thread != RT_NULL);

    /* disable interrupt */
    level = rt_hw_interrupt_disable();

    /* it should be RUNNING thread */
    if (thread->oncpu != RT_CPU_DETACHED)
    {
        thread->stat = RT_THREAD_RUNNING | (thread->stat & ~RT_THREAD_STAT_MASK);
        goto __exit;
    }

    /* READY thread, insert to ready queue */
    thread->stat = RT_THREAD_READY | (thread->stat & ~RT_THREAD_STAT_MASK);

    cpu_id   = rt_hw_cpu_id();
    bind_cpu = thread->bind_cpu ;

    /* insert thread to ready list */
    if (bind_cpu == RT_CPUS_NR)
    {
#if RT_THREAD_PRIORITY_MAX > 32
        rt_thread_ready_table[thread->number] |= thread->high_mask;
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
        rt_thread_ready_priority_group |= thread->number_mask;

        /* there is no time slices left(YIELD), inserting thread before ready list*/
        if((thread->stat & RT_THREAD_STAT_YIELD_MASK) != 0)
        {
            rt_list_insert_before(&(rt_thread_priority_table[thread->current_priority]),
                                &(thread->tlist));
        }
        /* there are some time slices left, inserting thread after ready list to schedule it firstly at next time*/
        else
        {
            rt_list_insert_after(&(rt_thread_priority_table[thread->current_priority]),
                                &(thread->tlist));
        }

        cpu_mask = RT_CPU_MASK ^ (1 << cpu_id);
        rt_hw_ipi_send(RT_SCHEDULE_IPI, cpu_mask);
    }
    else
    {
        struct rt_cpu *pcpu = rt_cpu_index(bind_cpu);

#if RT_THREAD_PRIORITY_MAX > 32
        pcpu->ready_table[thread->number] |= thread->high_mask;
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
        pcpu->priority_group |= thread->number_mask;

        /* there is no time slices left(YIELD), inserting thread before ready list*/
        if((thread->stat & RT_THREAD_STAT_YIELD_MASK) != 0)
        {
            rt_list_insert_before(&(rt_cpu_index(bind_cpu)->priority_table[thread->current_priority]),
                                &(thread->tlist));
        }
        /* there are some time slices left, inserting thread after ready list to schedule it firstly at next time*/
        else
        {
            rt_list_insert_after(&(rt_cpu_index(bind_cpu)->priority_table[thread->current_priority]),
                                &(thread->tlist));
        }

        if (cpu_id != bind_cpu)
        {
            cpu_mask = 1 << bind_cpu;
            rt_hw_ipi_send(RT_SCHEDULE_IPI, cpu_mask);
        }
    }

    RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("insert thread[%.*s], the priority: %d\n",
                                      RT_NAME_MAX, thread->name, thread->current_priority));

__exit:
    /* enable interrupt */
    rt_hw_interrupt_enable(level);
}
#else
void rt_schedule_insert_thread(struct rt_thread *thread)
{
    rt_base_t level;

    RT_ASSERT(thread != RT_NULL);

    /* disable interrupt */
    level = rt_hw_interrupt_disable();

    /* it's current thread, it should be RUNNING thread */
    if (thread == rt_current_thread)
    {
        thread->stat = RT_THREAD_RUNNING | (thread->stat & ~RT_THREAD_STAT_MASK);
        goto __exit;
    }

    /* READY thread, insert to ready queue */
    thread->stat = RT_THREAD_READY | (thread->stat & ~RT_THREAD_STAT_MASK);
    /* there is no time slices left(YIELD), inserting thread before ready list*/
    if((thread->stat & RT_THREAD_STAT_YIELD_MASK) != 0)
    {
        rt_list_insert_before(&(rt_thread_priority_table[thread->current_priority]),
                              &(thread->tlist));
    }
    /* there are some time slices left, inserting thread after ready list to schedule it firstly at next time*/
    else
    {
        rt_list_insert_after(&(rt_thread_priority_table[thread->current_priority]),
                              &(thread->tlist));
    }

    RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("insert thread[%.*s], the priority: %d\n",
                                      RT_NAME_MAX, thread->name, thread->current_priority));

    /* set priority mask */
#if RT_THREAD_PRIORITY_MAX > 32
    rt_thread_ready_table[thread->number] |= thread->high_mask;
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
    rt_thread_ready_priority_group |= thread->number_mask;

__exit:
    /* enable interrupt */
    rt_hw_interrupt_enable(level);
}
#endif /* RT_USING_SMP */

/**
 * @brief This function will remove a thread from system ready queue.
 *
 * @param thread is the thread to be removed.
 *
 * @note  Please do not invoke this function in user application.
 */
#ifdef RT_USING_SMP
void rt_schedule_remove_thread(struct rt_thread *thread)
{
    rt_base_t level;

    RT_ASSERT(thread != RT_NULL);

    /* disable interrupt */
    level = rt_hw_interrupt_disable();

    RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("remove thread[%.*s], the priority: %d\n",
                                      RT_NAME_MAX, thread->name,
                                      thread->current_priority));

    /* remove thread from ready list */
    rt_list_remove(&(thread->tlist));
    if (thread->bind_cpu == RT_CPUS_NR)
    {
        if (rt_list_isempty(&(rt_thread_priority_table[thread->current_priority])))
        {
#if RT_THREAD_PRIORITY_MAX > 32
            rt_thread_ready_table[thread->number] &= ~thread->high_mask;
            if (rt_thread_ready_table[thread->number] == 0)
            {
                rt_thread_ready_priority_group &= ~thread->number_mask;
            }
#else
            rt_thread_ready_priority_group &= ~thread->number_mask;
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
        }
    }
    else
    {
        struct rt_cpu *pcpu = rt_cpu_index(thread->bind_cpu);

        if (rt_list_isempty(&(pcpu->priority_table[thread->current_priority])))
        {
#if RT_THREAD_PRIORITY_MAX > 32
            pcpu->ready_table[thread->number] &= ~thread->high_mask;
            if (pcpu->ready_table[thread->number] == 0)
            {
                pcpu->priority_group &= ~thread->number_mask;
            }
#else
            pcpu->priority_group &= ~thread->number_mask;
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
        }
    }

    /* enable interrupt */
    rt_hw_interrupt_enable(level);
}
#else
void rt_schedule_remove_thread(struct rt_thread *thread)
{
    rt_base_t level;

    RT_ASSERT(thread != RT_NULL);

    /* disable interrupt */
    level = rt_hw_interrupt_disable();

    RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("remove thread[%.*s], the priority: %d\n",
                                      RT_NAME_MAX, thread->name,
                                      thread->current_priority));

    /* remove thread from ready list */
    rt_list_remove(&(thread->tlist));
    if (rt_list_isempty(&(rt_thread_priority_table[thread->current_priority])))
    {
#if RT_THREAD_PRIORITY_MAX > 32
        rt_thread_ready_table[thread->number] &= ~thread->high_mask;
        if (rt_thread_ready_table[thread->number] == 0)
        {
            rt_thread_ready_priority_group &= ~thread->number_mask;
        }
#else
        rt_thread_ready_priority_group &= ~thread->number_mask;
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
    }

    /* enable interrupt */
    rt_hw_interrupt_enable(level);
}
#endif /* RT_USING_SMP */

/**
 * @brief This function will lock the thread scheduler.
 */
#ifdef RT_USING_SMP
void rt_enter_critical(void)
{
    rt_base_t level;
    struct rt_thread *current_thread;

    /* disable interrupt */
    level = rt_hw_local_irq_disable();

    current_thread = rt_cpu_self()->current_thread;
    if (!current_thread)
    {
        rt_hw_local_irq_enable(level);
        return;
    }

    /*
     * the maximal number of nest is RT_UINT16_MAX, which is big
     * enough and does not check here
     */

    {
        rt_uint16_t lock_nest = current_thread->cpus_lock_nest;
        current_thread->cpus_lock_nest++;
        if (lock_nest == 0)
        {
            current_thread->scheduler_lock_nest ++;
            rt_hw_spin_lock(&_cpus_lock);
        }
    }
    /* critical for local cpu */
    current_thread->critical_lock_nest ++;

    /* lock scheduler for local cpu */
    current_thread->scheduler_lock_nest ++;

    /* enable interrupt */
    rt_hw_local_irq_enable(level);
}
#else
void rt_enter_critical(void)
{
    rt_base_t level;

    /* disable interrupt */
    level = rt_hw_interrupt_disable();

    /*
     * the maximal number of nest is RT_UINT16_MAX, which is big
     * enough and does not check here
     */
    rt_scheduler_lock_nest ++;

    /* enable interrupt */
    rt_hw_interrupt_enable(level);
}
#endif /* RT_USING_SMP */
RTM_EXPORT(rt_enter_critical);

/**
 * @brief This function will unlock the thread scheduler.
 */
#ifdef RT_USING_SMP
void rt_exit_critical(void)
{
    rt_base_t level;
    struct rt_thread *current_thread;

    /* disable interrupt */
    level = rt_hw_local_irq_disable();

    current_thread = rt_cpu_self()->current_thread;
    if (!current_thread)
    {
        rt_hw_local_irq_enable(level);
        return;
    }

    current_thread->scheduler_lock_nest --;

    current_thread->critical_lock_nest --;

    current_thread->cpus_lock_nest--;
    if (current_thread->cpus_lock_nest == 0)
    {
        current_thread->scheduler_lock_nest --;
        rt_hw_spin_unlock(&_cpus_lock);
    }

    if (current_thread->scheduler_lock_nest <= 0)
    {
        current_thread->scheduler_lock_nest = 0;
        /* enable interrupt */
        rt_hw_local_irq_enable(level);

        rt_schedule();
    }
    else
    {
        /* enable interrupt */
        rt_hw_local_irq_enable(level);
    }
}
#else
void rt_exit_critical(void)
{
    rt_base_t level;

    /* disable interrupt */
    level = rt_hw_interrupt_disable();

    rt_scheduler_lock_nest --;
    if (rt_scheduler_lock_nest <= 0)
    {
        rt_scheduler_lock_nest = 0;
        /* enable interrupt */
        rt_hw_interrupt_enable(level);

        if (rt_current_thread)
        {
            /* if scheduler is started, do a schedule */
            rt_schedule();
        }
    }
    else
    {
        /* enable interrupt */
        rt_hw_interrupt_enable(level);
    }
}
#endif /* RT_USING_SMP */
RTM_EXPORT(rt_exit_critical);

/**
 * @brief Get the scheduler lock level.
 *
 * @return the level of the scheduler lock. 0 means unlocked.
 */
rt_uint16_t rt_critical_level(void)
{
#ifdef RT_USING_SMP
    struct rt_thread *current_thread = rt_cpu_self()->current_thread;

    return current_thread->critical_lock_nest;
#else
    return rt_scheduler_lock_nest;
#endif /* RT_USING_SMP */
}
RTM_EXPORT(rt_critical_level);

/**@}*/

redpajama_set_name: RedPajamaGithub


Author: Catherine Harmon Toomer, M.D.
I am a Family Medicine and Community Health physician who investigates the biopsychosocial causes for what keeps you from feeling your best, then treats them primarily with weight and behavioral health management.
January 17, 2018 December 4, 2018 Catherine Harmon Toomer, M.D.
August 6, 2017 December 4, 2018 Catherine Harmon Toomer, M.D.


Midway Games said it has enhanced the action of two of its most popular sports video game franchises in two new releases — NHL Hitz Pro and NFL Blitz Pro.
Both long-established franchises, which the company said consistently rank in the top two or three top-selling sports games, have been updated with the addition of a new development partner — Next Level.
Newly introduced is the element of realism, which will be added to the "over-the-top" edgey style for which the franchises are best known.
NHL Hitz Pro is available now on the PlayStation2, Xbox and GameCube platforms. NFL Blitz Pro will ship on Oct. 27 for the Xbox and PlayStation2 platforms and on Nov. 17 for GameCube.
Newly added is five-on-five play, league penalties and violations and live online game-play capability for Playstation2 users.
Online players will benefit from player rankings and tournaments, in addition to 100 percent NHL 23-man player rosters.
Other additions to NHL Hitz Pro include real stadium graphics, unique offensive and defensive team formations, a player fatigue system, line changes, legitimate stick handling and realistic crowd noises.
NFL Blitz, meanwhile, was enhanced with DVD content featuring a behind-the-scenes look at the Pro Bowl with plays and audio capture sequences featuring NFL stars.
Blitz Online, offering head-to-head game play, player leaderboards, real-time online weather, tournament and downloadable content.
Franchise mode allowing up to 32 gamers.
Current team information with updated rosters, schedules uniforms and stadiums.


Watch Krept & Konan's specially re-versioned track for Sports Personality of the Year 2017 called "Young Lions / Wo Wo Wo".
The lyrics are a tribute to the success of England's Young Lions, with World Cup wins for the under 17s & under 20s and a Euros victory for the under 19s to celebrate this year.
WATCH MORE: Who's been tweeting our SPOTY stars?


text:
The long expected showdown between Misratan and Zintani forces in Tripoli appears to have kicked off. Islamist brigades are lining up behind the Misratans in a bid to push the Zintanis out of key strategic redoubts (i.e. the airport). The confrontation began when Misratan forces, including the powerful Central Libya Shield, moved hundreds of military vehicles into the capital as part of a bid to take control of Matiga and Tripoli International Airports (TIA). The Misratans are insisting that this move is in line with General National Congress (GNC) President Nuri Abu Sahmain's recent call for revolutionaries to come to protect the capital, and with GNC Decision 33, entrusting the security of Libya's towns to revolutionary forces and the army. The Misratans claim that their bid to take over these strategic sites in Tripoli is part of the state's effort to protect the city.
The Zintanis view the situation differently, seeing this move by the Misratans as a major attack by their long-time rivals, who are also supported by a host of Islamist brigades from Zawiyya, Tajoura, Janzour and parts of Tripoli. These Islamist brigades, along with the Misratans, are also accusing the Zintani brigades of being made up of former members of the 32nd Brigade that was run by Khamis Qadhafi. The Central Libya Shield and the Zintanis held a meeting on 12 July in an attempt to diffuse the situation, with the attending parties agreeing to form a committee to investigate rumours of various Zintanis being linked to the 32nd Brigade. They also reportedly agreed that the Zintani brigades would withdraw from TIA, and that a joint committee would take over control of the facility until the new House of Representatives took office. However, on 13 July a number of attacks were launched against TIA. The fighting intensified during the following day, killing six people and injuring 35. The fighting forced the closure of the airport, which is expected to last until 17 July.
The Foreign Ministry is still under siege by gunmen possibly linked to the Libya Revolutionaries Operations Room (LROR). The group is demanding the expulsion of Foreign Minister Mohamed Abdulaziz and a group of diplomats with ties to the Qadhafi regime. Following complaints from a number of Western embassies, the government has decided to relocate the ministry to another building in the capital as a temporary measure.
Another spate of bank robberies has occurred, including an attack on a vehicle transporting money for the Sirte branch of the National Commerce Bank. The robbers managed to take one million dinars when the vehicle was stopped at a false checkpoint. The attack prompted the closure of all commercial banks in Sirte. Additionally, armed robbers stole 1.7 million dinars from the Wadi Shatti branch of the Al-Jumuhouria Bank.


We are recruiting an exciting Product Line Director role in Germany for one of our global Industrial Technology clients. This appointment is part of a robust talent management strategy to attract and nurture high potential leaders for future VP GM roles located anywhere in the world.
Click on the slideshare below for more information.


text:
Exhibit navigation: Previous | Exhibit Info | Next
Tea pot with a Chinese view on a decorative panel. The lid's knop handle is a Chinese male figure holding up a tea brick. Part of a table service set (237767), National Museum of Natural History, Smithsonian Institution, United States.
(Sandra Castro, 2021)
Map Smithsonian National Museum of Natural History
Fernando and Tomás Zamora
The pieces have not been tested as to metal content but the Smithsonian identifies it as is silver or silver-plated and copper alloy. The local name for the material is " tumbaga " (silver-plate on a copper alloy). (Sandra Castro, 2021)
12.5" x 9" x 4.75" (lid) 5.75" high
Gifted to the Smithsonian's National Museum of Natural History by then Secretary of War William Howard Taft in 1906. The tea pot is part of a 33-piece set crafted by Filipino silversmiths, Fernando and Tomás Zamora around 1903. The set was exhibited at the Louisiana Purchase and Lewis and Clark expositions before being purchased and then gifted to the NMNH by then Secretary of War William Howard Taft in 1906—three years before he was elected president.
Search for the rest of the 32-piece set by going through the object tour under Representing the Colony: The Zamora Table Service
Not on display. This was displayed at the Louisiana Purchase Exposition (St. Louis, ·Missouri) in 1904 and at the Lewis and Clark Exposition (Portland, Oregon) held the following year. In 1906, the War Department of the United States purchased the set and displayed it a third time at the Alaska-Yukon-Pacific Exposition (Seattle, Washington) in 1909. (Sandro Castro, 2021)
Photo credit: Marisa Ventura Diaz-Etchevehere
Fernando and Tomás Zamora, "Tea Pot," Mapping Philippine Material Culture, accessed January 19, 2022, https://philippinestudies.uk/mapping/items/show/4347.
Representing the Colony: The Zamora Table Service at the Louisiana Purchase Exposition


text:
Q: Some wedge product calculation I was just wondering, if we have some $k-$form $a$, and $n-$form $b$, then is it true that:
$$d(a\wedge b)=da\wedge b$$
Not;
$$d(a\wedge b)=da\wedge db$$
Furthermore is it also true that if $a$ is some $k$-form defined on a manifold $M$ with dimension $2m$, then $a^k=0$ $\forall k>m?$ It says this is true, but I do not get the operation $a^k$, what does it mean for a differential form to the $k$th square mean?

A: Neither, if $a$ is a $k$-form and $b$ any form, then
$$d(a\wedge b)=da\wedge b+(-1)^ka\wedge db.$$

redpajama_set_name: RedPajamaStackExchange


Executive Development Group provides leadership education, organizational development and executive coaching to clients worldwide. Our approach is research-based and supported by decades of clinical, academic and management expertise. The firm is experienced with a wide variety of organizations presenting unique requirements in change management, talent management, competitiveness, process improvement and workplace enhancement. Our partners publish frequently and hold faculty positions with major universities.
Change, growth and evolution start with fulfillment. It's always a challenge for organizations to navigate the inevitable uncertainty of business and life. We approach the task from a strategic perspective, but with an individual focus. The job is really about liberating the human spirit in a way that contributes positively to the organization.


Blackberry KEYone Limited Edition Black Review – QWERTY Goodness!
Continue reading Blackberry KEYone Limited Edition Black Review – QWERTY Goodness!
Posted on October 7, 2018 Categories TechnologyTags amazon, black edition, blackberry, blackberry key one, blackberry keyone, blackberry keyone black edition, blackberry keyone full review, blackberry keyone india, blackberry keyone limited edition, blackberry keyone limted edition black, blackberry keyone problems, blackberry keyone pros and cons, blackberry keyone review, c4etech, India, key one, keyone, keyone camera review, keyone review, limited edition, optimus infracom, phreview, review, TCL32 Comments on Blackberry KEYone Limited Edition Black Review – QWERTY Goodness!


"Breaking the Rules!" – International Conference of the Leibniz Research Alliance "Energy Transition"
You are here: Home / The IPN / Archive / "Breaking the Rules!" – International Conference of the Leibniz Research Alliance "Energy Transition"
Climate change as a global challenge and energy transition as an attempted answer can hardly be viewed from the perspective of just one discipline - or one nation. This was once again demonstrated by the first international conference of the Leibniz Research Alliance "Energy Transition", which took place in Berlin on June 14th and 15th, 2018.
To discuss "Breaking the Rules! Energy Transitions as Social Innovations", some 180 scientists from more than 15 nations gathered at the Social Science Center Berlin (WZB) to share and discuss their views on the energy transition, their research results and project ideas. The strong multidisciplinarity that characterizes the research alliance was also reflected in the field of participants so that the discussions often went beyond the concrete contents of the studies presented and touched on fundamental questions and desiderata of the energy transition as well as the accompanying research. The concept of the energy transition itself (for example in contrast to the necessity of several energy transitions at different levels) was also critically discussed. This year's conference focused on the social innovations of the energy transition and the social aspects inherent in these innovations, viewed from various disciplinary, inter- and transdisciplinary perspectives.
The IPN participated in the conference by organizing three sessions on the role of education, participation and ownership for the success of the energy transition and by giving two presentations. The sessions were moderated by Professor Ute Harms and Hanno Michel; Dirk Mittenzwei and Sarah Kellberg used the opportunity to introduce their doctoral projects to a broad and critical audience.
The program was rounded off by keynotes from Professor Maarten Wolsink (University of Amsterdam), who called for the "intelligent grid" as a further development of the smart grid, and Professor Elizabeth Shove, Director of the DEMAND Centre at Lancaster University, who pointed out the need for new perspectives in energy transition research, for example by pointing out the influence of apparently non-energy policy measures on energy-related decision-making.
Overall, the conference offered a lively platform for exchange across disciplinary boundaries and discourse to be continued in the coming years. The participants agreed that a successful energy transition requires enormous technical and social efforts, but that further joint research and development work and ongoing interdisciplinary exchange provide a fruitful and necessary foundation for these efforts.