Get up and move As muscles tire, slouching, slumping, and other poor postures become more likely; this in turn puts extra pressure on the neck and back. In order to maintain a relaxed yet supported posture, change positions frequently. One way is to take a break from sitting in an office chair every half hour for two minutes in order to stretch, stand, or walk.... That in turn saddles you with lower back pain, neck pain, achy shoulders, migraines, and even digestive system problems. Good posture, however, can decrease (or even eliminate) those issues.
Poor posture can ruin your spinal alignment, deprive you of energy, and increase your likelihood of neck, back, and shoulder injury.... in More Ways than One "No slouching posture!", your parents said... "Sit up straight!". And for good reason. If you slouch, you are bound to get severe neck and back pains sooner or later.
Stiff Neck When Sitting! Causes And How To Get Rid Of It?
For instance, if you have the habit of slouching while sitting, it will affect the muscles around your neck and make them weak. This, in turn, will lead to fatty deposits around the neck. This, in turn, will lead to fatty deposits around the neck. how to set up karaoke using youtube in More Ways than One "No slouching posture!", your parents said... "Sit up straight!". And for good reason. If you slouch, you are bound to get severe neck and back pains sooner or later.
The Ladybug Reach lengthens chest, neck, and arm muscles. While standing place your fingers on your shoulders and bring your elbows to your sides shoulder height. how to stop prediabetes from turning into diabetes These chest and neck muscles need to be stretched regularly in combination with chiropractic adjustments to help realign the posture… Now for the emotional causes of slouching… Since the developing emotional brain hasn't developed control it can make the teenage brain more sensitive to emotional stress.
The Ladybug Reach lengthens chest, neck, and arm muscles. While standing place your fingers on your shoulders and bring your elbows to your sides shoulder height.
Most cases of neck pain have a postural component as part of the underlying problem. In such cases, recognizing and understanding poor posture can play an important role in finding neck pain relief. In such cases, recognizing and understanding poor posture can play an important role in finding neck pain relief.


Popularity - 8,025 views, 7.2 views per day, 1,121 days on eBay. Super high amount of views. 361 sold, 0 available.
8,025 views, 7.2 views per day, 1,121 days on eBay. Super high amount of views. 361 sold, 0 available.
Seller - 42,417+ items sold. 0.3% negative feedback. Top-Rated Seller! Ships on time with tracking, 0 problems with past sales.
42,417+ items sold. 0.3% negative feedback. Top-Rated Seller! Ships on time with tracking, 0 problems with past sales.
Complete Set 20 Parables of Jesus Solid Sterling Silver Medals - 83 Troy Ounces!


text:
Rights groups call for end to Myanmar sectarian violence
October 28, 2012 11:26:08 am
Matthew Pomy
[JURIST] Human Rights Watch (HRW) [advocacy website] called Saturday for an end to the sectarian violence in Myanmar [text] between the Rakhine Buddhists and Rohingya Muslims. HRW detailed an arson attack [materials, PDF] in the coastal Rohingya neighborhood at the edge of Kyaukpyu city. HRW also called on the government to do more to end the violence and protect the rights of the Rohingya, whose civil rights were effectively taken away with their citizenship in 1982. Phil Robertson, deputy Asia director at Human Rights Watch, detailed steps the government should take:
Burma's government urgently needs to provide security for the Rohingya in Arakan State, who are under vicious attack. Unless the authorities also start addressing the root causes of the violence, it is only likely to get worse. … Deploying sufficient security forces to restore order impartially and protect basic rights in Arakan State is necessary, but not enough. Burmese government officials and opposition leaders need to condemn the violence and work for lasting solutions to Arakan's ethnic problems.
The recent violence has displaced even more people to the already overcrowded internally displaced persons (IDP) settlement camps. While the violence is not one sided, HRW reported that the Rohingya have faced the worst of it. As a result of widespread discrimination, thousands of Rohingya and non-Rohingya Muslims have been driven from the larger cities and into these IDP camps.
Concern over Myanmar's human rights record has been growing recently. In August Physicians for Human Rights reported that Myanmar's army is still committing human rights abuses [JURIST report] against ethnic minorities in Karen state. Earlier that month, HRW accused [JURIST report] Myanmar security forces of human rights abuses against a minority religious community. In July UN High Commissioner for Human Rights Navi Pillay also expressed concern [JURIST report] about both the continued violence in Myanmar and the country's human rights abuses committed in dealing with it.

redpajama_set_name: RedPajamaCommonCrawl


Were you looking for information about Lewy Body Dementia? Louie body dementia is a common misspelling of Lewy body dementia.
Lewy body dementia is a type of progressive dementia that takes its name from Lewy bodies, which are abnormal structures found in some nerve cells in the brain of people with this form of dementia. Symptoms may begin with visual hallucinations. Other symptoms associated with this type of dementia may include acute confusion, tremor, and memory loss.
The symptoms of Lewy body dementia are often similar to those seen with Alzheimer's disease and Parkinson's disease. In fact, doctors are not yet certain if this type of dementia is a distinct condition or a variant of Alzheimer's or Parkinson's disease. While there is no cure for Lewy body dementia, certain medications may help in the management of symptoms.


text:
Harrison, Ward, Mendenhall & Roethlisberger Meet Media To Discuss Off The Field Issues
Posted on July 29, 2011 at 10:56 am
This morning the Steelers took another step towards putting the offseason off the field incidents of Hines Ward, James Harrison and Rashard Mendenhall behind them as all three players met the media this morning to answer questions. Ben Roethlisberger also answered questions as well. This obviously was carefully coordinated by the Steelers brass and it is a great move.
Mendenhall refused for the most part to talk about his controversial 9/11 Bin Laden tweets as he is currently in court suing Champion over his lost endorsement deal. Mendenhall did say that the comments made by Harrison about him being a fumble machine where no big deal and that the media just needed something to talk about. He says he didn\'t take those comments personally.
Harrison was asked about his situation and in essence apologized to commissioner Roger Goodell thru the media for calling him nasty names in the Men\'s Journal article. Harrison admitted his comments were way out of line and that he was speaking out of anger and frustration and apologizes for that.
[audio:https://steelersdepot.com/wp-content/uploads/2011/07/james-harrison-latrobe11.mp3|titles=James Harrison 2011 Training Camp]
Ward was a bit guarded while talking about his recent DUI arrest and said he knows his Dancing with the Stars appearance made story huge nationally. He said he has not heard from league so far, and neither Mike Tomlin nor Art Rooney II have spoken to him a out his DUI so far. He went on to say he will leave the arrest in the hands of his attorney and believes the result will be favorable. He added that he does not think this will be a distraction.
Roethlisberger said the Harrison comments made about him were no big deal and that he and Harrison were joking about it when it turned into a national story. Roethlisberger said he has been in touch with Plaxico Burress and lobbying for his return to Pittsburgh. He went on to talk about the return of Willie Colon and said that he may be stronger and better than ever.
Credit to Tweets by Scott Brown, Mark Kaboly, Ed Bouchette, Mike Prisuta and Will Graves.
Related Items:Art Rooney II, Champion, Dancing with the Stars, Hines Ward, James Harrison, Men's Journal, Mike Tomlin, Plaxico Burress, Rashard Mendenhall, Roger Goodell, Willie Colon
Report: Steelers Request Interview With Cowboys DB Coach Joe Whitt Jr. For Vacant DC Role
Tomlin Now 2nd-Longest Tenured NFL Head Coach Following Payton Tuesday Resignation
Steelers' Art Rooney II Open To Amending Overtime Rule To Guarantee Possession For Both Teams In Postseason


Last week we listed "have a goal" as one of the main attributes of a good negotiator. What does that mean? When you enter a real estate negotiation, you should know 2 things ahead of time: the true market value of the property you're trying to buy or sell, and the price you're willing to go. A good negotiator knows this information ahead of time keeps it in mind during the offer/counter-offer process. This provides a "road map", which keeps the negotiations purposeful and on track.


text:
War Resisters' International
wri-flyers
Home › Programmes › Nonviolence Programme
About WRI
Right to Refuse to Kill
CO-Alerts
CO Guide
World Survey CO & recruitment
Prisoners for Peace/CO Database
Militarisation of Youth
CMOY website
Nonviolence Programme
Nonviolence Resources
New worlds in old shells
Nonviolence for change
Past programmes and projects
Egypt: Support Maikel Nabil
WRI Women
Dealing with the Past
WRI Network
WRI People
WRI Affiliates
WRI background documents and statements
WRI Wiki
European Antimilitarist Network
WRI Working Groups
WRI Forums
The Broken Rifle
War Resisters' Stories
War Profiteers News
CO-Update
Books and reports
Handbook for Nonviolent Campaigns
WRI Image Galleries
Writing for WRI
Global Initiative against War Profiteers
International CO Day
Prisoners for Peace day
Shut down NATO
Support Colombian objectors
Support Turkish objectors
War starts here
Turkey: Stop the cycle of violence
More ways to support WRI
WRI Webshop
Theme groups
01 Mar 1999 — warresisters
Civil Disobedience and Environmental Action
facilitated by Stephen Hancock and Melanie Jarman
The aims of the group were: to uncover the environmental concerns of anti-militarists; to explore the links between militarism and environmental destruction; to compare methods being used; and to learn from each other as anti-militarists and environmentalists.
Day 1 explored the connections between environmental destruction and militarism and identified relevant questions to bear in mind during our discussions.
There were two case studies for day 2: a video and presentation on the campaign against nuclear transport in Germany and a presentation on Genetix Snowball, a UK campaign against genetic engineering.
Two questions were posed for Day 3 (Gender Day): To what extent are gender concerns part of your movement/group; and do your ways of organising attempt to address gender concerns or do they reinforce these? To what extent are gender concerns linked to militarism and environmental destruction? (discussed simultaneously in a men's group and in a women's group).
Day 4 had a discussion around prompt questions, including the following: "Patriarchy is the root cause of both militarism and environmental destruction"; "We do not have time to address sexism within our movements because our ecological system is on the verge of collapse"; "A trade-off between jobs and a healthy ecological system is inevitable"; "Our economic system is a form of war"; "Multinational organisations cannot be reformed"; and "Civil disobedience should always be the last resort". A case study looked at the campaign against the construction of a cellulose plant in Chile.
Day 5, the final day, looked at how nonviolent strategies differ between Western Europe and Chile; considered points for future civil disobedience actions; looked at how we can support one another in different countries, and at how ecological concerns can be brought into WRI's work. Members of the group took on individual commitments: in addition, parts of the group's recommendations have been incorporated into the WRI Strategic Plan.
Evaluation comments included the following:
Good stuff: diversity of participants; size of group; the group showed which way we have to take in the future; level of interaction; so much outcome; that the group existed; to be able to be together and know the work of others in the ecological effort; hearing the case studies; good group dynamics.
Bad stuff: not much depth; size of group; didn't have much discussion about strategy; little information available beforehand.
Could do better: discussion / background paper in advance; get info out between ourselves; knowledge of case studies in advance to have known better how to compare them; begin preparation earlier; more assertive facilitation.
Report written by Melanie Jarman. A longer version is available in the WRI archives.
Grassroots groups and peace processes
facilitated by Rafa Sainz de Rozas, Sni, and Rob Fairmichael
We tried to give each morning a similar format, and break the heaviness by doing things a bit creatively or having a game, a break or some music. Each day we spent some time looking at particular aspects of the theme and a particular geographical conflict; on the latter we were able to 'do' Euskadi (Basque Country), Croatia, Bosnia Herzegovina, Kosovo/a, Chad, and Northern Ireland; sometimes it was a general exploration, sometimes more focused on our theme. The participants in the theme group were mainly European. More general aspects of the theme which we tried to explore included stages of peace processes (a list of stages was developed specifically for this group and used for a barometer/spectrum exercise), gender, the possibility of influencing political processes, the role of NGOs, economics etc.
'Neutrality' or impartiality was an issue of importance. No one really went for the term 'neutral', and 'impartiality' did not necessarily fit in all cases, or was not appropriate to the work some people were doing. Economics was felt to be an area which was ignored by peace activists but could be more fruitfully explored. The importance of strengthening indigenous grassroots groups in conflict areas rather than assuming 'we' had to rush in to intervene was an important point. On gender, we shared the different situations of women in relation to power and grassroots groups in our varied situations.
Even ten or eleven hours is short for dealing with a topic of this nature, and many questions were left not dealt with. Concluding questions and comments included:
Our position on military intervention in Kosovo/a. While people were not going to call for NATO intervention there was a realisation of the limited possibilities for 'us' at this stage.
Nonviolent interposition in the process of nonviolent action.
Co-option of peace groups into government agendas. Northern Ireland was particularly in mind in this regard.
Peace work with both sides (the oppressor too). The need for work on the 'side' of the 'oppressor' came across quite clearly. But then there are 'oppressed' within the side of the 'oppressor' too, and it may be more useful to talk about 'oppressor elites'.
Worn out activists' involvement in other conflicts--share their experience and resources.
Strategic planning on conflict prevention to efficiently prevent war. That is, intervening when we can actually have an effect rather than too late.
What are the channels and bridges for peace groups and mainstream society? Schools, churches etc.
Report written by Rob Fairmichael
Identity and Conflict
facilitated by Biljana Kasic and Maggie Helwig
Report back
There were about 35 people in our group, which was diverse both geographically and in terms of theoretical understanding or experience with the theme of identity. Much of the discussion stayed at quite a preliminary and exploratory level. Nevertheless, many of the participants found this valuable, since they had hardly explored the issues before at all. It is clear that this is an area that is still new ground for much of the peace movement and should continue to be explored.
The first day was spent in a go-around asking people to say how they identified themselves, which of their possible identities were important to them; then in small-group discussion of the question, "When people look at you, how do you think they identify you?" At the end of the session, we had people write down their thoughts and feelings about "group identity" and "individual identity".
The second day focussed on national identity and conflict. The day began with discussion in pairs asking people to think of a time when they wanted to stress their national identity or felt it to be important to them.
Gender day began with a go-around on the question, "When you woke up this morning, were you aware of your gender?" After a short role play and a discussion, participants were then asked to divide into small groups and each identify a situation of conflict in which their gender played a role. Interestingly, when the groups reported back, none cited any specific experiences; all made general reflections on gender and particularly on how they had felt about the discussions earlier in the day.
The fourth day began with a continuation of the discussion from gender day, which was probably more intense and more constructive than the discussions that happened on the day itself. We also came upon the interesting question of what kind of "collective identity" this theme group had so far developed. Then we spent quite a long time in small group discussions--each group was given one intentionally provocative statement about identity to discuss, then report back to the group.
The final day began with people who had been relatively quiet in the discussions being asked to make comments if they wanted to; then moving into some group discussion about these comments; followed by a brainstorm on how WRI could continue these discussions; and ending with a short evaluation.
Evaluation comments
We had a lot of positive feedback about the group; I think people found it very enjoyable, and for most people it seemed to be interesting and valuable. There's no question that the theme group developed a distinct "group identity" of its own, and people were using the ideas generated as a frame in which to view other discussions in which they participated.
However, I don't think we got very far in a discussion of the dynamics of identity, and, as someone observed, "we spent so much time trying to understand identity, we never really had time to talk about its relationship to conflict." The considerable differences between the participants and the relative novelty of the topic for many of them were probably the main reasons we didn't get any deeper.
Issues around "privilege" proved particularly sensitive, and gender was probably the most explosive single topic--but national/ethnic identity was also hard to discuss in much depth. Issues of, e.g., religious and class identity were barely raised. Perhaps discussion in very small groups would take us further
The Triennial Business Meeting agreed in a general way that this was an area WRI should continue to explore, and keep in mind when formulating agendas for future meetings, but no specific plans were made.
Report written by Maggie Helwig. A longer version is available in the WRI archives.
Nonviolence and Social Empowerment
facilitated by Howard Clark and Vesna Terselic
This was the largest theme group, beginning with perhaps 60 people. It was also the most diverse group, with a substantial group from Bosnia and Croatia, and three Chileans. The first session began late as all the theme groups had to be formed and shown to their meeting rooms, and interpretation arrangements had to be made.
The opening session was simple: a go-around of names, organisations, countries; a name game (throwing a cushion and calling the name); language group meetings on why people had chosen this and what they expected/hoped for; setting an exercise for tomorrow: "a moment when I sensed my/our power"
The second day began by sketching out the rough progress we wanted to make in the week, moving from micro to macro, from personal to societal. Then: in groups of 4, first, a round telling each other a story "a moment when I sensed my/our power"; second, a round asking "what did this sense of power consist of?", "what factors made it possible to behave?" and "was it real or an illusion?" A brainstorm and discussion followed.
On Gender Day--the third day--we examined the cultures of obedience, solidarity, and resistance. In our introduction it was noted that similar exercises could be carried out through the lens of race or class.
The fourth day examined the characteristics of Social Empowerment. Conclusions and evaluations were made on the fifth day. Written outcomes included lists of factors giving sense of power and factors demotivating/reducing sense of power; list of characteristics of social empowerment; and a list for WRI future work on social empowerment.
This is a huge topic and this was a huge group to try to tackle this through participatory and "elicitative" methods. We welcomed the rich diversity of experience within the group. However, the difficulties of bridging the Latino-Hispanic and Western peace movement contexts were much less than those of making a good connection with the Bosnian-Croatian context.
Most participants expressed appreciation for the work on Day 2. However, what we produced were lists, containing some items that needed to be taken deeper. Above all, a list is not a structured analysis, does not bring out the patterns or suggest the tools for analysis of specific cases.
The Culture of Obedience part of Day 3 was also widely appreciated, although one woman told me it was just another "sharing" go-around without deepening anything or addressing difficulties. During the reporting back, there was some tension between men and women. The different methods followed by the groups meant that the women reported back a more discursive list of points, including more personal experience, while the men produced a shorter and more pointy list, having discussed the most personal elements in pairs or trios. This accentuated the difference perceived by one woman that "women feel a pressure to conform, men a pressure to perform".
The men's group had an interesting detour into whether conforming to a masculine role model should be seen as "disempowered behaviour", as in some senses it is "overempowered", taking power from women.
People enjoyed our "elicitative" methods to begin with, but I think to get beyond their existing limits needed to concentrate on some specific cases and to be offered some specific frames for analysis. This means more theoretical input, either that comes from the convenors and is implicit in some of the exercises, or from a resource person in the group. (Even getting participants to fill in a particular grid around power implies some theory.)
Some of the talks at the start-of-day plenary session could have contributed to our discussion, especially the one from Yeni from Indonesia, which described how they built their movement up. Perhaps it would be good for each theme group to begin with a brief round, offering people the opportunity (but not obliging them) to report back on things they'd heard elsewhere in the conference that added to our discussion.
Report written by Howard Clark. A longer version is available in the WRI archives.
Peace Action and the Modernisation of the Military
Facilitated by Rafael Ajangiz and Orlando Castillo
We are witnessing today some structural changes in the armed forces of all our countries -- more visible in the North than in the South -- which seem much more serious than just another reform.
Territorial sovereignty is no longer the main concern of our rulers and the military. The main concern today is how to achieve national--or regional--interests in the fierce competition that results from globalisation at all levels. That means intervention abroad whenever and wherever it is needed, political, economical and, why not, military intervention--both warmaking and peacemaking military intervention.
But globalisation has also meant pressure from below, from a civil society who has a say about issues such as the environment or the war and the human rights situation elsewhere; this has already compelled some state governments to engage in some interventions which do not match their doctrine of national interest.
Our societies hold a certain number of values that naturally clash with those of the military: non-discrimination on grounds of gender, sexual orientation, religious, ethnicity, race, and so forth; environmental protection; respect for human rights, both group and individual; social justice; the arms trade; and so forth. These values appear to be more widely held with each new generation, so it is reasonable to think that better opportunities for peace action will open in the future.
The armed forces themselves are trying to adapt to these new values. Concerns over gender, sexual orientation, and environment are already acted on in some armed forces today -- if only to refer to them when more recruits are needed. This adaptation is two-sided. For example, in some states soldiers are able to refer their concerns to an ombudsman: this has resulted in less arbitrariness and, consequently, in a greater legitimisation of the military. At the same time, however, the armed forces cannot replicate civilian values entirely, because in doing so they would cease to be armed forces. A certain tension will always exist between the traditional military values and the new emergent civilian values. That tension, or confrontation, is our mobilisation potential.
Women are now admitted to many armed forces, including in specialist and combat programmes, but the admittance criterion is that they behave just like men, that they do exactly the same things and meet the same requirements. We are happy to observe that this kind of integration is posing some problem to the military institutions, but clearly this is not the way to deal with gender issues. Our concern is not that the military have equal opportunities policies, or that an individual's right to a particular career is maintained. Rather, we are trying to move towards a non-patriarchal society in which, very obviously, armies have no place.
Another issue we examined is conflict between the social and the military spheres over public expenditure. The military has commonly attempted to resolve this conflict by reinventing its role, for instance accentuating its role in natural disasters or presenting "humanitarian intervention" as a cost-effective alternative to accepting war refugees.
Directions for WRI work
The final goal of WRI is abolishing the army, all the armies. Definitely, it is an ambitious goal, but we can slowly bring it up if our peace action is addressed to delegitimise the military and their activities.
By delegitimisation we understand a diminution of the people's co-operation and compliance. This is the key criterion against which we should assess any strategy developed. Some areas to examine are:
Carrying out specific campaigns to further the idea of the abolition of the armed forces and the comprehensive strategies which will make it possible, including regional campaigns such as "Europe without armies" and the like.
Campaigns directed at the involvement of the military in contemporary conflicts:
Campaigns to make the public understand the failures and limitations of military intervention
Campaigns for asylum laws in every country;
A campaign against NATO and its satellite organisations
A campaign to outlaw the "School of the Americas" and similar training centres
Campaigns on military expenditure:
awareness campaigns on the true level of military spending and its integration with the arms industry and the arms trade;
an extensive tax resistance campaign, in cooperation with development NGOs to give the larger picture of the need to reallocate resources away from the military and towards social development;
a campaign to promote unilateral disarmament, e.g. broadening the strategy of the antipersonnel landmines campaign to all kind of armament, holding an International Day Without the Pentagon, and/or denouncing our own country to the International Court of Justice in The Hague for having produced, sold and used war armaments, a clear violation of human rights;
a campaign against all production and trade of military armaments.
Campaigns to resist military recruitment, forced or not:
in the promotion and experiencing of civil disobedience as both a strategy for action and a value to replace the militaristic countervalues such as patriotism, discipline, hierarchy and consent;
in the opening of anti-war museums;
in the promotion of a pledge about non involvement in war to be signed by members of the public, especially in those countries involved in an armed conflict.
Report written by Rafael Ajangiz. A longer version is available in the WRI archives.
Women Crossing the Line
Convened by Shelley Anderson and Ellen Elster
Approximately 18 women participated in the theme group (from Bosnia, Britain, Chechnya, Chile, Croatia, Germany, Italy, the Netherlands, Norway, Serbia, Spain, the Ukraine and USA).
Although there are dangers inherent in colluding with traditional roles played by women in caring for the vulnerable, and in building relationships and communicating, it was apparent that women's particular skills developed in these domains should be acknowledged, valued, supported and drawn upon by the peace movement at large.
The first day we introduced ourselves by telling who we were, what we were doing and our expectations. We also added a few words about the meaning of our names. Then we drew briefly the history of women in WRI, Helga starting telling us about Sibyl Morrison and Myrtle Solomon. Then Ellen, Shelley, Casha and Carmen each told their story from the WRI women's working group. We ended this day by discussing some points about the specific of women in peace, or if there were anything which was specific.
The second day Karoline from Norway told about her experiences from film-making, working with women in conflict-situation and especially women who had from suffered concentration camp during the second world war. We saw pieces from her film "The time of darkness", which also was shown in its whole later that week.
The third day Shelley, Netherlands/USA, told about her project in IFoR Women's Peacemaking Programme, especially the empowering part of the programme. Shelley presented the full programme in a workshop later and showing a video from the first consultation in Europe. After her introduction followed a discussion on women's strategies in their work, strengths and weaknesses both personally and organisationally.
The fourth day we had a go-around to sum up from the Gender Day. This report will be included in the report from the women's working group which were held later that week. Sara told about her experiences in the organisation of the disappeared in Chile and how women played a special role in that work.
The fifth and the last day Irina from Ukraine told about her work before we summed up. Shelley and Ellen had drafted a report from the group which was discussed. Then we evaluated the week's work by going around. Maia from Chechnya came in at the very end and gave us a brief introduction of the situation in her country.
From the evaluation it was pointed out that the mixture of presentation and discussion in an affective atmosphere, gave possibilities to listen and learn from each other, and to go home inspired and empowered to go on with our own work at home. The networking was important, also for future work. It was also mentioned by several that friends from Belgrade and Kosovo/a were missed in the group.
Report written by Ellen Elster. The group also wrote a joint statement, which is available in the WRI archives or through the office.
Reconstruction and Democratisation
Facilitated by Jørgen Johansen and Vanja Nikolic
This group examined the dynamics of social reconstruction at the grassroots level, where it is often necessary to construct institutions (and ways of working) which never existed before. It was abundantly clear to the participants that international agreements -- not just in the Balkans but in other contemporary conflict zones -- only put a lid on conflicts. Issues included impunity, bringing to light the crimes of a regime or of war, and finding a just basis for future peace.
Published in The Broken Rifle, March 1999, No. 42
Civil disobedience/NVDA
Website notes & manuals | RSS feeds
War Resisters' International, 5 Caledonian Rd, London N1 9DX, Britain
tel +44-20-7278 4040 & +44-20-3355 2364, skype: warresisters, fax +44-20-7278 0444
email info@wri-irg.org (encryption key), web http://wri-irg.org
All content of this site is licenced under a Creative Commons Licence, unless otherwise stated.
Website developed by Netuxo Ltd, Design by Simo Hellsten


You will dismantle all negative thinking in this process that is happening now. You will stop being against yourself in any way. There is much that will be uncovered for you. Many layers of things or constructs you have accepted you will now see as false. Once seen it will be easy for you to let them go. You see, you cannot go forward from here with any one else's opinions along for the ride. There is no room! You understand? No extra energy for you to embody that going forward.


CARSON, Calif. – The sport of soccer is on the rise in the United States.
According to a recent Gallup poll, soccer's rising popularity has the sport closing in on the big three of American sports (basketball, baseball, football). Per Gallup, soccer's popularity has tripled in the last decade and presently ranks fourth among all sports.
Seven percent of U.S. adults surveyed stated that soccer was their favorite sport to watch for the poll conducted on Dec. 4 to Dec.11. The beautiful game's popularity finished just two percent behind baseball and four percent behind basketball. For the first time since 2013, soccer polled ahead of ice hockey.
Much of the success of soccer is owed to its popularity among millennials. Presently, soccer is the second most popular spectator sport among those 18 to 34 years old. Also, soccer is the third most popular sport for 35 to 54 years old at 10 percent.


text:
Wyden to Hold Town Halls in Malheur, Baker, Union, Wallowa, Grant and Harney Counties
Portland, OR - U.S. Senator Ron Wyden will host town hall meetings on Tuesday, November 9, 2010, in Malheur, Baker and Union counties and on Wednesday, November 10, 2010, in Wallowa, Grant and Harney counties. Senator Wyden has been holding town halls in each Oregon county every year since 1996. Malheur County Town Hall Meeting Date: November 9, 2010 Time: 10 a.m. (Mountain Time) Location: Treasure Valley … Continue Reading
Wyden to Hold Town Halls in Lincoln and Tillamook Counties This Friday
Portland, OR - U.S. Senator Ron Wyden will hold town hall meetings in Lincoln and Tillamook counties on Friday, November 5, 2010. Senator Wyden holds town halls in each Oregon county every year. Lincoln County Town Hall Meeting Date: November 5, 2010 Time: 11 a.m. Location: Newport City Hall 169 SW Coast Highway Newport Tillamook County Town Hall Meeting Date: … Continue Reading
Statement by Agriculture Secretary Tom Vilsack on Wyden Eastside Forest Legislation
WASHINGTON, Oct. 30, 2010 - Today, Agriculture Secretary Vilsack made the following statement in support of Senator Ron Wyden's Eastside Forest Legislation. "One of the most significant challenges we face in our National Forests is finding greater common ground among environmentalists, forest industry, and rural communities that allows us to support jobs in these communities and to restore our forests, to make them more resilient, to benefit water resources, to address climate change, to … Continue Reading
Wyden, Merkley Announce Nearly $2 Million to Build Addition to Vets Home
Washington, D.C. - Continuing efforts to improve the quality of life for Oregon veterans, U.S. Senators Ron Wyden (D-Ore.) and Jeff Merkley (D-Ore.) announced that the State Veterans Home in The Dalles will receive a $1.9 million Federal grant to construct an addition to the facility. The veterans home currently operates without a common room that can accommodate all of the residents, and the federal grant will be put toward constructing a facility to accommodate large gatherings of residents … Continue Reading
Wyden Statement on USTR Investigation into Chinese Trade Violations
Washington, D.C. - In response to today's announcement from the United States Trade Representative that the U.S. has opened an investigation into possible Chinese violations of trade agreements regarding green technology, U.S. Senator Ron Wyden (D-Ore.) - chair of the Finance Committee's subcommittee on International Trade - released the following statement: "China's willingness to subvert international trade agreements is becoming clearer and poses a serious risk to U.S. and global trading … Continue Reading
Wyden, Merkley Praise $13.5 Million Grant to Restore Coos Bay Rail Line and Create Jobs in Southwest Oregon
Portland, OR - Oregon Senators Ron Wyden and Jeff Merkley issued the following statements Friday following the announcement that the U.S. Department of Transportation has awarded the Port of Coos Bay with a $13.5 million grant to fully repair the Coos Bay rail line. "Rebuilding the Coos Bay Rail Line will help rebuild the economy in every community it touches. When CORP said this rail line and this community were worth nothing more than scrap metal, we said no. I'm proud to have led the … Continue Reading
Wyden Calls on BPA, PacifiCorp to Aid Facebook Expansion and Economic Development in Central Oregon
Portland, OR - Looking to create jobs and expand economic development in Central Oregon, Senator Ron Wyden today urged the Bonneville Power Administration and PacifiCorp to ensure that Facebook has the power it needs to expand its new facility in Prineville. "Facebook's decision to locate a server facility in Prineville is one of the bright spots in the Central Oregon economy and a harbinger of more construction and high-tech jobs to come," Wyden said. "Now, Facebook's effort to triple its … Continue Reading
CONGRESS URGES PRESIDENT'S DEFICIT REDUCTION COMMISSION TO LOOK TO CUTS IN THE PENTAGON'S BUDGET FOR SOLUTIONS
Washington, D.C. - As the President's National Commission on Fiscal Responsibility and Reform reviews ways to address America's national debt crisis, Reps. Barney Frank (D-MA), Ron Paul (R-TX), and Sen. Ron Wyden (D-OR) have brought together a large group of representatives and senators to call for a specific solution. In a letter sent Wednesday to members of the Commission, they call on the Commission to look closely at excessive defense spending in an effort to reduce the Federal deficit … Continue Reading
Wyden Statement on USTR Standing Up For Oregon Lumber Against Unfair Trade Practices
Washington, D.C. - U.S. Senator Ron Wyden (D-Ore.) issued the following statement today regarding the United States Trade Representative's announcement that it is beginning formal consultations with Canada over a de facto subsidy that British Columbia provides to its lumber producers in violation of the U.S.-Canada Softwood Lumber Agreement. Senator Wyden is the chair of the Senate Finance Committee's Subcommittee on International Trade. "The flood of subsidized Canadian lumber into the U.S. … Continue Reading
Wyden, Inhofe Clinical Trials Bill Signed by President Obama
Washington, D.C. - Yesterday, President Obama signed into law the Improving Access to Clinical Trials (I-ACT) Act finally allowing patients with rare diseases to participate in clinical drug studies without fear of losing their eligibility for public assistance such as Supplemental Security Income (SSI) and/or Medicaid. Introduced by U.S. Senators Ron Wyden (D-Ore.) and Jim Inhofe (R-Okla.), the I-ACT ensures the small amount of financial compensation patients receive to participate in … Continue Reading
Wyden, Merkley, Praise DOD Decision to Approve New Wind Farms in Oregon
Washington, DC - After months of working with the Department of Defense (DoD) to strike a balance between domestic energy and national security needs, U.S. Senators Ron Wyden (D-Ore.) and Jeff Merkley (D-Ore.) praised the Department's announcement today that it will no longer block the development of eight new wind farms: six in Oregon and two in Washington state. Earlier this year DoD halted new wind farm construction in Eastern Oregon and Eastern Washington after determining that the … Continue Reading
Wyden, Blumenauer, Merkley, Schrader Introduce Bipartisan Legislation to Rein in Secretive War Contracting Process
Washington, DC - Today, Sens. Ron Wyden and Jeff Merkley along with Reps. Earl Blumenauer and Kurt Schrader introduced bipartisan legislation to restore oversight and accountability to the secretive war contracting process. The push comes in the wake of revelations that war contractor KBR, which allegedly exposed Oregon National Guardsmen to a cancer-causing chemical in Iraq, secured a secret clause in its contract with the Army that may put taxpayers on the hook for damages. "Our government … Continue Reading
Wyden to Extend Tax Credit on Renewable Fuel Infrastructure
Washington, D.C. - As the first of the nation's mass market electric vehicles are set to debut at the end of this year, the tax credit that helps businesses and residents afford the cost of constructing alternative-fuel refueling infrastructure will expire. U.S. Senator Ron Wyden (D-Ore.) has introduced bipartisan legislation to extend and improve the tax credit on the refueling infrastructure the motor vehicle industry needs for alternative fuel vehicles to succeed. "Whether you're plugging … Continue Reading
Bill to Give Cong. Gold Medal to 'Go For Broke' Veterans Ready for President's Signature
Washington, D.C. - Continuing efforts to recognize and honor World War II veterans for their service and sacrifice, U.S. Senator Ron Wyden (D-Ore.) announced that Nisei veterans from the "Go For Broke" regiment will be awarded the Congressional Gold Medal - the highest civilian honor available in this country - once the President signs a recently passed bill. The legislation cleared the final Congressional hurdle last week, passing the House of Representatives after having been unanimously … Continue Reading
Wyden, Merkley Announce over $7 million in Recovery Act Funding to Improve Water System in Sutherlin
Washington, D.C. - Oregon's U.S. Senators Ron Wyden and Jeff Merkley announced today that the U.S. Department of Agriculture has awarded more than $7 million to improve the water system in Sutherlin, Oregon. The Recovery Act funding will go toward improving the health, sanitation and infrastructure of the water system, and help protect the local environment from contamination. "This funding is an investment in rural America that will improve water system infrastructure and give folks in … Continue Reading
Wyden, Merkley Urge Servicemembers To Collect Stop Loss Pay Before Deadline
Washington, D.C. - Making sure that Oregon servicemembers receive the Stop Loss Special Pay they are owed for service between September 11, 2001 and September 30, 2009, U.S. Senators Ron Wyden (D-Ore.) and Jeff Merkley (D-Ore.) encouraged veterans and current servicemembers to apply for the benefits before they are no longer available to them. The Department of Defense estimates that 145,400 personnel are eligible nationwide, although only 58,000 claims have been paid to this point. The … Continue Reading
Merkley, Wyden Announce Over $1.7 Million to Enhance Production of Specialty Crops
WASHINGTON, D.C. - Oregon's Senators Jeff Merkley and Ron Wyden announced today that the Oregon Department of Agriculture will receive $1.7 million from the U.S. Department of Agriculture (USDA) to enhance the production and sale of specialty crops. Oregon ranks fifth in the nation in production of specialty crops, which include blueberries, cranberries, cherries, hazelnuts, onions, pears, potatoes, and raspberries, as well as other fruits and vegetables, grass seed, and nursery crops, … Continue Reading
Wyden, Merkley Announce $28 Million in Oregon Projects in Defense Appropriations Bill
Washington, D.C. - Continuing efforts to provide Oregon servicemembers, National Guard members and reservists with the equipment and services they need while serving in combat and particularly when they transition back to civilian life, U.S. Senators Ron Wyden (D-Ore.) and Jeff Merkley (D-Ore.) have announced more than $28 million in funding as part of the defense appropriations bill. The bill has been agreed to by the Appropriations Committee and will head to the Senate floor for full … Continue Reading
Wyden, Crapo Bill Will Level Playing Field for Geothermal Energy Investment
Washington, D.C. - In an effort to increase energy production from renewable sources, U.S. Senators Ron Wyden (D-Ore.) and Mike Crapo (R-Idaho), introduced the Geothermal Energy Investment Act of 2010 to increase investment in geothermal power facilities and technologies and give producers the ability to compete with other renewable energy resources, like solar, on an equitable basis. The legislation amends an existing tax credit to bring geothermal power more on par with other renewable … Continue Reading
Wyden, Merkley Announce $4 million for Innovation in Wave Energy Technology
Washington, D.C. - Continuing efforts to accelerate development of wave energy technology in Oregon, U.S. Senators Ron Wyden (D-Ore.) and Jeff Merkley (D-Ore.) have announced that Oregon will receive more than $4 million from the U.S. Department of Energy for wave energy technology. The funding will speed up projects to design and implement technologies that generate clean, renewable electricity from Oregon's rivers and coast. "The ocean off Oregon's coast offers enormous potential for … Continue Reading


text:
Leon Herbert von Ondarza, bis 1907 de Ondarza (* 24. November 1878 in Altona; † 18. Juni 1971 in Grahlenstein bei Gelting) war ein Generalleutnant der Wehrmacht.

Leben
Herbert von Ondarza war am 1. März 1899 als Fahnenjunker in die Preußische Armee eingetreten und wurde am 18. August 1900 zum Leutnant befördert. Am 6. September 1907 ließ er sich als "von Ondarza" in die preußische Adelsmatrikel aufnehmen. Bis zum Beginn des Ersten Weltkriegs diente er im Großherzoglich Mecklenburgischen Feldartillerie-Regiment Nr. 60 in Schwerin. Auch sein älterer Bruder Ramon (1874–1950), welcher bereits Mitte Dezember 1896 in den preußischen Adel aufgenommen worden war und bis zum Oberst in der Wehrmacht befördert wurde, diente in diesem Regiment. Am 27. Januar 1910 war er hier zum Oberleutnant befördert worden und 1912 in der 6. Kompanie. Bis 1912 war er mit dem Ritterkreuz des Greifenordens ausgezeichnet worden.

Nach dem Krieg wurde er in die Reichswehr übernommen und am 1. November 1928 Oberstleutnant. Von Anfang Oktober 1929 bis September 1931 war er Kommandeur der I. Abteilung des 3. Artillerie-Regiments in Schweidnitz, welches dem Artillerieführer III der 3. Division in Berlin unterstellt war. Am 1. April 1931 wurde er zum Oberst befördert. Ende September 1931 wurde er mit der Abgabe seines Kommandos aus dem aktiven Dienst verabschiedet. Bis 1928 war er u. a. mit dem Kronen-Orden 4. Klasse, dem Ritterkreuz des Königlichen Hausordens von Hohenzollern mit Schwertern, dem Eisernen Kreuz I. Klasse, dem Hamburger und dem Lübecker Hanseatenkreuz und dem Ritterkreuz des Ordens St. Johannes von Jerusalem in Rom des Malteserordens ausgezeichnet worden.

Am 1. Mai 1937 wurde er nach der Ernennung zum Oberst (E) (RDA zum 1. November 1936) in die Wehrmacht einberufen und in das OKH kommandiert 1939 war er dann in der Inspektion der Artillerie (In 4) unter Generalleutnant Walter Petzel im OKH. Am 13. Oktober 1939 übernahm er ein Artillerie-Regiment und wurde am 1. Februar 1940 ArKo 17 bei XIII. Armeekorps. In dieser Position wurde er am 1. August 1940 zum Generalmajor ernannt. Vom 1. Januar 1942 bis 20. September 1942 war er dann Höherer Artillerie-Kommandeur 305 (HArko 305), welcher aus dem ArKo 17 neu gebildet worden war. Das Kommando gab er an Generalleutnant Friedrich von Wehregg ab. Ondarza kam in die Führerreserve. Am 1. November 1942 wurde er noch Generalleutnant, aber am 31. Mai 1943 aus dem aktiven Dienst verabschiedet.

1958 wohnte er in Grahlenstein bei Flensburg.

Familie
Die ursprünglich spanische Familie de Ondarza kam mit Ulpiano de Ondarza (1832–1893) nach Deutschland. Ulpiano de Ondarza war als Reeder, erst in Bilbao und dann in Hamburg aktiv. Er heiratete 1865 die in Hamburg deutsche Kaufmannstochter Auguste Wilhelmine Melosch (1847–1934). Herbert von Ondarza war ihr Sohn.

Am 2. Oktober 1902 heiratete Ondarza in Gelting Josepha Maria Alice von Hobe (* 1881), Tochter des Päpstlicher Geheim-Kämmerer und Gutsbesitzers Bertram von Hobe (1849–1911). Einer ihrer Söhne, Leon von Ondarza (1903–1945), Vater von Henning von Ondarza, fiel als Oberst kurz vor Ende des Zweiten Weltkriegs bei einem britischen Tieffliegerangriff.

Schriften (Auswahl)
 Geschichte der Großherzoglich-Mecklenburgischen Artillerie. Meisenbach, 1913.
 Ausbildungshilfsbuch für den schweren Artilleristen. Verlag Offene Worte, 1939.
 Taschenbuch der leichten Artillerie. Verlag Offene Worte, 1939 und anschließend mehrere Auflagen.

Literatur
 Wolfgang Keilig: Die Generale des Heeres 1939–1945. Podzun-Pallas-Verlag, Friedberg 1956, S. 241.

Weblinks
 zu Ulpiano de Ondarza: Von den Gezeiten ans Licht gespült. Welt, 2013.

Einzelnachweise

Hauptmann (Preußen)
Oberstleutnant (Reichswehr)
Generalleutnant (Heer der Wehrmacht)
Person im Ersten Weltkrieg (Deutsches Reich)
Person im Zweiten Weltkrieg (Deutsches Reich)
Kommandeur eines Artillerie-Regiments (Heer der Wehrmacht)
Artilleriekommandeur (Heer der Wehrmacht)
Träger des Preußischen Königlichen Kronenordens 4. Klasse
Ritter des Königlichen Hausordens von Hohenzollern
Träger des Eisernen Kreuzes I. Klasse
Träger des Hanseatenkreuzes (Lübeck)
Träger des Hanseatenkreuzes (Hamburg)
Deutscher
Geboren 1878
Gestorben 1971
Mann

redpajama_set_name: RedPajamaWikipedia


Stargazer Dark Red Wine Semi-permanent Lip Stain Pen.
PERIPERA Ink Airy Velvet - 8g, NEW SHADES AVAILABLE - # 01-15, UK Seller!
Stargazer Semi-permanent Lip Stain Pen 11.
ETUDE HOUSE Colourful Drawing Darling LIP TINT - UK SELLER.
These chunky lip crayons from Revlon are the ideal mix of lip balm & stain, pampering your pout whilst providing a perfect flush of long-lasting colour. Set includes.
TONY MOLY Delight Tony Tint LIP TINT Korean Cosmetic. Red colour. Ordered as part of a haul from Korea but decided I didn't want it.


text:
Ганналіс Яадла (;  12 липня 1986, Вільянді, Естонія) — естонська футболістка, захисниця. Виступала за жіночу збірну Естонії.

Клубна кар'єра
Футбольну кар'єру розпочала в «Таммеці» (Тарту). У 2011 році підписала контракт зі «Флорою» (Таллінн). У 2009 році протягом нетривалого періоду часу виступала за шведський клуб «Умеа Содра».

Протягом сезону 2011/12 років тренер національної збірної Естонії Кейт Боанас організував перехід Яадли в «Тоттенхем Хотспур», яку тренувала Карен Хіллз (грала під керівництвом Боанаса в «Чарльтон Атлетик»). Боанас сказав: «Ця співпраця дуже сприяє розвитку гравчинь, і вони повертають в Естонію з новим вмінням, яке надихає інших гравців».

Вона грала за команди Сент-Ентоніс/Ньюффілд/Вольфсон/Сент-Кросс Фокс і в 2015 році виграла жіночий турнір футбольної асоціації Оксфордського університету. У березні 2015 року Яадла підписав контракт з англійським клубом ФА ЖФЛ 2 «Оксфорд Юнайтед».

Кар'єра в збірній
Виступала за жіночу збірну Естонії з футболу.

Особисте життя
Окрім футбольної кар'єри, Джаадла є істориком та науковцем. Її дослідження зосереджено на дитячій смертності в Тарту XIX століття.

Примітки

Посилання
 Візитна картка гравчині на офіційному сайті ФІФА
 Візитна картка гравчині  на офіційному сайті Естонської футбольної асоціації
 Статистика виступів на офіційному сайті Естонської футбольної асоціації

 Профіль гравчині  на сайті worldfootball.net
 Профіль гравчині на сайті futbolinis.lt

Естонські футболістки
Гравчині збірної Естонії з футболу
Футболістки «Таммеки» (Тарту)
Футболістки «Тоттенгем Готспур»
Футболістки «Оксфорд Юнайтед»


text:
Weddin Shire Council
List of Top Best Schools in Weddin Shire Council 2022 Ranking
Checkout list of Best Schools in Weddin Shire Council 2022 - a complete list of Schools in Weddin Shire Council Australia with information on Fees, Admission procedure, Ranking, Rating & Reviews, Curriculum, Facilities, Contact Details and address. Find list of Top Schools in Weddin Shire Council which are CBSE, ICSE, CIE CAIE Camridge, IB and state affiliated Schools in Weddin Shire Council Australia. Find top best schools near me in Weddin Shire Council.
Click on the name of the school from Weddin Shire Council school list for information on Admission, Fees, Curriculum, School Contact Details, Ranking, Reviews and Ratings of Best Schools in Weddin Shire Council. List contains both National and International Schools in Weddin Shire Council covering list of Playschool/Pre School/Pre Primary, Primary, Secondary and Senior Secondary Schools and K12 Schools. For List of schools having only Preschool/Playschool/Daycare: Best Pre Schools in Weddin Shire Council. The below list of schools in Weddin Shire Council covers Girls Schools, Boys Schools and Co-ed schools providing Day or Boarding/Residential schools in Weddin Shire Council.
Caragabal
Top Best Australian Curriculum Schools in Weddin Shire Council
Best Pre Schools in Weddin Shire Council
Caragabal Public School, Weddin Shire Council
Caragabal, Weddin Shire Council, New South Wales, Australia
Caragabal Public School, Weddin Shire Council is a Coed Day School with classes from KG to VI located in Caragabal Weddin Shire Council.
Grenfell Public School, Weddin Shire Council
Grenfell, Weddin Shire Council, New South Wales, Australia
Grenfell Public School, Weddin Shire Council is a Coed Day School with classes from KG to VI located in Grenfell Weddin Shire Council.
Explore Schools in Popular localities in and around Weddin Shire Council
Caragabal, Weddin Shire Council Schools
Grenfell, Weddin Shire Council Schools


text:
\section{Using this file}
\label{sect: using this file}

The source of this document is a .nw file (for
`noweb,' an implementation of Knuth's literate
programming technique: see `Literate programming
with noweb,' by Andrew L. Johnson and Brad C. Johnson,
{\em Linux Journal,} October 1st 1997).
Noweb allows one to mix LaTeX with C (or pretty
well any programming language), allowing a well-annotated
program.  One can extract `chunks' from it.
You need the noweb system, of course (that is,
notangle to extract the C part and noweave
to typeset the full document).

This document includes a Makefile.  To start
the ball rolling, you  can extract it as follows:

\beginvbox
notangle -t8 -Rwagener.Makefile wagener.nw > wagener.Makefile
\endvbox

With it, you can make a CUDA source file (wagener.cu)
or a DVI copy of this document (make dvi produces wagener.dvi)

There is one problem with wagener.cu.  The construct
{\Tt{}<<<\nwendquote}\ldots{\Tt{}>>>\nwendquote} is a necessary part of the cuda source
code, and it conflicts with noweb's
construct {\Tt{}<<\nwendquote}\ldots{\Tt{}>>\nwendquote}.  Therefore wagener.cu contains

\begin{center}
{\Tt{}match{\_}and{\_}merge\ \ LLL\ range,\ block\ RRR\ (\ hood,\ newhood,\ scratch\ );\nwendquote}
\end{center}

\noindent and it must be edited, changing
{\Tt{}LLL\nwendquote} to {\Tt{}<<<\nwendquote} and {\Tt{}RRR\nwendquote} to {\Tt{}>>>\nwendquote}.

\nwfilename{wagener.nw}\nwbegincode{1}\moddef{copyright}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
/*
 *  Copyright (C) 2010-12 Colm O Dunlaing (odunlain@maths.tcd.ie)
 *
 *  This file is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published
 *  by the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

\nwendcode{}\nwbegindocs{2}\nwdocspar

\section{Wagener's algorithm, CUDA version}

The present goal is to make a working CUDA version
of Wagener's PRAM algorithm for computing an
upper hood for a set of $n$ points presented
in left-to-right order.

We have not considered the memory access patterns
which may seriously degrade performance.  Again,
thread divergence may degrade performance --- it
is an interesting exercise to write `non-divergent'
code.  This has been done in some places and not
in others.

This program assumes that
\begin{itemize}
\item $n$ (the number of points)
is a power of 2.
\item No three points are collinear.
\item
All $x$-coordinates are between 0 and 1.
We shall use the point {\tt REMOTE}, $(10,0)$,
for padding.  Any point whose $x$-coordinate
is $>1$ is assumed to be `remote,' used for padding.
\item There are no floating-point errors (i.e.,
it's a problem, but it's not our problem.)
\end{itemize}

Also, three shared device arrays, one {\tt short} and
two {\tt float2} are used, of size $n$. Their total size is $18n$ bytes.
This puts
inessential limitations on $n$ --- there would be
no difficulty, and little overhead, in slicing the data into manipulable
chunks for larger $n$.

\nwenddocs{}\nwbegincode{3}\moddef{wagener}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
\LA{}copyright\RA{}
\LA{}globals\RA{}
\LA{}match and merge\RA{}
\LA{}main\RA{}

\nwendcode{}\nwbegincode{4}\moddef{globals}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
#include <stdio.h>
#include <stdlib.h>
#include <cuda.h>

float2 * point;
int count;
float2 * host_hood;
        /* The following are device variables */
float2 * hood, * newhood; short * scratch;

float2 REMOTE = \{ 10.0f, 0.0f \};

        /***************************************
         * make_remote () without memcopy
         ***************************************/

__device__ void make_remote ( float2 * p )
\{
  p->x = 10.0f; p->y = 0.0f;
\}

\nwendcode{}\nwbegindocs{5}\nwdocspar

Points are stored in the array {\tt point}, and initially
copied to {\tt host\_hood}.  The main program launches
the {\tt global} routine {\tt match\_and\_merge} repeatedly
to merge adjacent hoods from intervals of size $d$
to hoods of size $2d$.

The algorithm repeatedly copies {\tt host\_hood[]} to
device array {\tt hood[]}, launches\hfil\break
{\tt match\_and\_merge()},
and copies the device array {\tt newhood[]} to {\tt host\_hood[]}.

Let $s = \log_2 n$; $s$ is a positive integer.
The hood is built in $s-1$ stages (there is nothing to do if $s=1$).
At the $r$-th stage, let $d=2^r$: {\tt host\_hood} defines $n/d$
hoods.
For $0 \leq \ell < n/d$, let $P$ be the $\ell$-th block
of $d$ points from {\tt point} (indexed from $\ell d$
to $\ell d + d - 1$). The $\ell$-th hood
is $H(P)$.  The corners of $H(P)$ are stored in the
corresponding block of {\tt host\_hood}, shifted left and
padded with copies of {\tt REMOTE}
(Figure \ref{fig: host_hood}).

\begin{figure}
\centerline{
\includegraphics[height=2in]{figures/host_hood}
}
\caption{Points and hoods.  The $x$-coordinates have
been distorted in the depiction of {\tt host\_hood}.}
\label{fig: host_hood}
\end{figure}

Next,
$n/2$ {\tt match\_and\_merge} threads are launched in
$n/(2d)$ blocks of dimension $d_1\times d_2$, where
$d_1 = 2^{\lceil r/2\rceil}$ and
$d_2 = 2^{\lfloor r/2\rfloor}$, so $d = d_1 d_2$.
The $\ell$-th block of threads cooperate to
compute $H(P\cup Q)$, where $P$ and $Q$ are
the $2\ell$-th and $2\ell+1$-st interval of $d$ points,
locating the common
tangent of $H(P)$ and $H(Q)$ and replacing these
separate hoods by $H(P\cup Q)$, shifted and padded
in a block of $2d$ entries in {\tt hood}.

The routine {\tt make\_remote(float2 *p)} is used
to set a point to remote values (I'm not sure
how to assign a constant {\tt float2} value in device code).

\nwenddocs{}\nwbegincode{6}\moddef{main}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup

int pos_power_of_2 ( int x )
\{
  if ( x < 2 )
    return 0;

  while ( x > 1 )
    if ( x
      return 0;
    else if ( x == 2 )
      return 1;
    else
      x /= 2;
\}

void show_current_hoods ( FILE * outfile, int d )
\{
  int i, j, hoodsize;
  fprintf(outfile,
  for ( i=0; i<count/d; ++i )
  \{
    hoodsize = 0;
    for ( j=0; j < d; ++j )
      if ( host_hood[i*d+j].x <= 1.0 )
        ++ hoodsize;
    fprintf(outfile,
    for ( j=0; j<d; ++j )
      if ( host_hood[i*d+j].x <= 1.0 )
        fprintf(outfile,
                host_hood[i*d+j].y);
  \}
  fprintf(outfile,"\\n");
\}

main( int argc, char * argv[] )
\{
  int i;
  int d, d1, d2;
  FILE * file;
  FILE * trace;
  short * h_scratch;

  count = 0;

  if ( argc != 2 && argc != 3 )
  \{
    fprintf(stderr,
        "usage:
        argv[0]);
    exit(-1);
  \}

\nwendcode{}\nwbegindocs{7}\nwdocspar

{\sc The program copies} the points to standard output, computes
the hood and writes the hood points to standard output.
It may write comment lines beginning {\tt \#}.  If the
trace file is used, it prints the intermediate hood sequences
to this file.  The program output is intended to be
sent to a companion program {\bf hood2ps} which generates
postscript.

\nwenddocs{}\nwbegincode{8}\moddef{main}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
  file = fopen ( argv[1], "r" );
  if ( file == NULL )
  \{
    fprintf(stderr,
    exit(-1);
  \}

  trace = NULL;
  if ( argc == 3 )
  \{
    trace = fopen ( argv[2], "w" );
    if ( trace == NULL )
      fprintf(stderr,"Can't write to
  \}

  fscanf(file,
  if ( ! pos_power_of_2 ( count ) )
  \{
    fprintf(stderr, "Count
    exit(-1);
  \}

  printf (

  point = (float2*) malloc (count * sizeof(float2) );
  host_hood = (float2*) malloc (count * sizeof(float2) );
  h_scratch = (short*) malloc ( count * sizeof ( short ) );

  for (i=0; i<count; ++i)
  \{
    fscanf(file,
    printf(
    host_hood[i] = point[i];
  \}
  printf("\\n");

  d1 = 2;
  d2 = 1;
  d  = d1 * d2;

  hood = newhood = NULL;
  scratch = NULL;

\nwendcode{}\nwbegindocs{9}\nwdocspar
{\sc The array {\tt point} will contain the} data points,
and {\tt host\_hood}
will contain the intermediate hoods as illustrated
in Figure \ref{fig: host_hood}.
{\tt H\_scratch} is to hold a copy, on the host, of
the device array {\tt scratch}, for debugging.
The shared device arrays {\tt hood, newhood, scratch}
are allocated at every thread launch.  Also, {\tt host\_hood}
needs to be copied to {\tt hood} before the thread
launch.

\nwenddocs{}\nwbegincode{10}\moddef{main}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
  while ( d < count )
  \{
    if ( trace != NULL )
      show_current_hoods ( trace, d );
    if ( hood != NULL )
    \{
      cudaFree ( hood );
      cudaFree ( newhood );
      cudaFree (scratch);
    \}

    cudaMalloc( (void **) & hood, count * sizeof( float2 ));
    cudaMemcpy( hood, host_hood, count * sizeof(float2),
        cudaMemcpyHostToDevice);

    cudaMalloc( (void **) & newhood, sizeof( float2 ) * count );
    cudaMalloc( (void **) & scratch, count * sizeof(short) );

\nwendcode{}\nwbegindocs{11}\nwdocspar
\noindent
{\sc
Now the thread launch:} $n$ threads in $n/(2d)$ blocks
of dimension $d_1\times d_2$.

\nwenddocs{}\nwbegincode{12}\moddef{main}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup

        /*
         * LLL and RRR need to be replaced
         * by triple < and >: double < and >
         * have a special meaning in noweb,
         * the literate programming system
         * we use.
         */

    dim3 range ( count / (2*d) );
    dim3 block ( d1, d2 );
    match_and_merge  LLL range, block RRR ( hood, newhood, scratch );

\nwendcode{}\nwbegindocs{13}\nwdocspar
\noindent
{\sc When all threads have terminated,}
copy the revised array {\tt newhood} to {\tt host\_hood},
and print various debugging items.

\nwenddocs{}\nwbegincode{14}\moddef{main}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup

    cudaMemcpy(host_hood, newhood, count * sizeof(float2),
        cudaMemcpyDeviceToHost);

    printf("#returned from match_and_merge, d1
        d1, d2, d);

    cudaMemcpy(h_scratch, scratch, count * sizeof (short),
        cudaMemcpyDeviceToHost);
\nwendcode{}\nwbegindocs{15}\nwdocspar
\newpage
\nwenddocs{}\nwbegincode{16}\moddef{main}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
    printf("#scratch:\\n#");
    for(i=0; i<count; ++i )
    \{
      printf(
      if ( i > 0 && i
        printf("\\n#");
    \}
    printf("\\n");

    if ( d1 > d2 )
      d2 *= 2;
    else
      d1 *= 2;
    d = d1 * d2;
  \}

\nwendcode{}\nwbegindocs{17}\nwdocspar
The following is for debugging.

\nwenddocs{}\nwbegincode{18}\moddef{main}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup

  cudaMemcpy(host_hood, newhood, count * sizeof(float2),
        cudaMemcpyDeviceToHost);

  printf("#newhood contents\\n");
  for (i=0; i<count; ++i)
    printf("

  if ( trace != NULL )
  \{
    fprintf(trace,"0\\n");
    fclose ( trace );
  \}

  show_current_hoods ( stdout, count );

  return 0;
\}

\nwendcode{}\nwbegindocs{19}\nwdocspar

\begin{minipage}{3in}
The remaining functions are on the device.
The function {\tt left\_of()} returns 1 if $r$ is left
of the directed line-segment $pq$,\\
(i.e., $\det(q-p,r-p)>0$), 0 otherwise.
\end{minipage}
\hfil
\begin{minipage}{2in}
\includegraphics[width=1.8in]{figures/left_of}
\end{minipage}
\newpage
\nwenddocs{}\nwbegincode{20}\moddef{match and merge}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup

        /***************************************
         * left_of ()
         ***************************************/

__device__ int left_of ( float2 r, float2 p, float2 q )
\{
  float value;

  value =
  (q.x - p.x) * (r.y - p.y) - (q.y - p.y) * ( r.x - p.x );

  return ( value > 0 );
\}

\nwendcode{}\nwbegindocs{21}\nwdocspar
Suppose $P$ and $Q$ are adjacent intervals of points
processed by a thread block in {\tt match\_and\_merge}.
Given two points $p$ and $q$
$q$ is either a corner of $H(Q)$ or is remote,
and $p$ is to the left of $Q$, there is a unique
tangent to $H(Q)$ from $P$: suppose $q'$ is the
corner of $H(Q)$ which supports the tangent.
Let $f(p,q)$ be {\tt LOW, EQUAL,} or {\tt HIGH}
according as $q$ is left of, at, or right of $q'$
(high if $q$ is remote).

Similarly if $p$ is remote or on $H(P)$ and $q$
is to the right of $P$, a function $f(p,q)$ indicates
whether $p$ is left of, at, or right of the
point supporting the tangent to $H(P)$ from $q$
(or remote).

These functions are implemented (on the device) by {\tt g} and {\tt f}
below, where $p$ = {\tt hood[i]} and $q$ = {\tt hood[j]}
and $P$ is defined by the range
{\tt start..start+d-1}, $Q$ by {\tt start+d..start+2*d-1}.

\bigskip

\centerline{\includegraphics[height=2in]{figures/fg}}

\nwenddocs{}\nwbegincode{22}\moddef{match and merge}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup

#define LOW  -1
#define EQUAL 0
#define HIGH  1

__device__ short g( float2 * hood, short i, short j,
                      short start, short d )
\{
  float2 p, q, q_next, q_prev;
  int atstart, atend;
  int isleft;

  if ( hood [j] . x > 1 ) /* REMOTE */
    return HIGH;

  p = hood[i];
  q = hood[j];

  atend = ( j == start + 2*d - 1 || hood[j+1].x > 1.0 );

\nwendcode{}\nwbegindocs{23}\nwdocspar

{\tt Atend} signals the condition that $q$ is the rightmost
corner of $H(Q)$.  As written, it might cause thread divergence,
which could be remedied by adding an extra slot
in {\tt hood} and making it {\tt REMOTE.}
Using {\tt atend}, we can (without divergence)
make {\tt q\_next} default
to a point directly underneath the righmost corner
in $H(Q)$, in the case where $q$ is the last
corner in $H(Q)$.

If {\tt q\_next} is left of $p q$, then $q$
is {\tt LOW}.

\nwenddocs{}\nwbegincode{24}\moddef{match and merge}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup

  q_next = hood [ j+1-atend ];
  q_next.y -= (float) atend;

  if ( left_of ( q_next, p, q ) )
        /*
         * avoidable divergence?
         */
    return LOW;

\nwendcode{}\nwbegindocs{25}\nwdocspar
Similarly {\tt atstart} indicates whether $q$ is
leftmost in $H(Q)$, in which case {\tt q\_prev} is
directly below it; otherwise it is the corner
of $H(Q)$ to its left;  $q$ is {\tt HIGH}
iff {\tt q\_prev} is left of the directed line-segment
$p q$.

\nwenddocs{}\nwbegincode{26}\moddef{match and merge}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup

  atstart = ( j == start + d );
  q_prev = hood[ j + atstart - 1 ];
  q_prev.y -= (float) atstart;

  isleft = left_of ( q_prev, p, q );

  return HIGH * isleft + EQUAL * (1-isleft);
\}

        /*******************************
         *      f ( i, j, start, d )
         *******************************/

__device__ short f( float2 * hood, short i, short j,
                       short start, short d )
\{
  float2 p, q, p_next, p_prev;
  int atstart, atend;
  int isleft;

  if ( hood [i] . x > 1 ) /* REMOTE */
    return HIGH;

  p = hood[i];
  q = hood[j];

  atend = ( i == start + d - 1 || hood[i+1].x > 1 );

  p_next = hood [ i+1-atend ];
  p_next.y -= (float) atend;

  if ( left_of ( p_next, p, q ) )
    return LOW;

  atstart = ( i == start );
  p_prev = hood[ i + atstart - 1 ];
  p_prev.y -= (float) atstart;

  isleft = left_of ( p_prev, p, q );

  return HIGH * isleft + EQUAL * (1-isleft);
\}
\nwendcode{}\nwbegindocs{27}\nwdocspar
\begin{wrapfigure}{r}{2.7in}
\centerline{\includegraphics[width=2.5in]{figures/block}}
\caption{thread allocation.}
\label{fig: block}
\end{wrapfigure}

\noindent
{\sc The workhorse} of Wagener's algorithm is the
{\tt match\_and\_merge} procedure below.
Recall that $n/(2d)$ threads are launched
in blocks of dimension $d_1\times d_2$.  The
$\ell$-th block is to calculate $H(P\cup Q)$,
where $P$ and $Q$ are intervals of $d$ points
in {\tt hood} beginning at $2d\ell$ (this offset is
computed and stored in
{\tt start}). First {\tt start} and other
parameters are computed, and the scratch
array is set to a recognisably `uninitialised' value.
({\tt scratch[start..start+2*d-1]} is shared by the threads
in the same block).

The main effort is calculating the corners
of $H(P)$ and $H(Q)$ supporting the common
tangent.  Their indices will be placed
in {\tt pindex} and {\tt qindex}, initially
$-1$ to show uninitialised.

There are $d_1$ sample points along $H(P)$
and $d_2$ along $H(Q)$, but some of them
will be {\tt REMOTE}.

{\sc Match\_and\_merge} begins by setting the variables
$d_1, d_2, d,$ {\tt start}, $x,y,$, {\tt indx} to mirror
the construction of its thread blocks. Also,
{\tt pindex, qindex, scratch} are set to negative
values, meaning not initialised.
Also $i$ and $j$ are set to sample corners
(indices) in $H(P)$ and $H(Q)$.
There are $d_1$ sample indices $i$ and $d_2$ sample
indices $j$.  If $I$ is the set of sample indices $i$,
namely, $I = \{\text{\tt start} + d_2 x:~ 0 \leq x < d_1\}$,
and correspondingly $J = \{\text{\tt start} + d + d_1y:~ 0 \leq y < d_2\}$,
then the procedure is outlined as follows.

For $0 \leq x < d_1$, let $i_x = \text{\tt start}+d_2x$, so
$I = \{i_x:~ 0 \leq x < d_1\}$.  Also, for
$0 \leq y < d_2$, let $j_y = \text{\tt start} + d + d_1 y$,
so $J = \{ j_y: ~ 0 \leq y < d_2\}$.

\renewcommand{\L}{\textless}

\nwenddocs{}\nwbegincode{28}\moddef{match and merge}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
\LA{}mam 0: intialisations\RA{}
\LA{}mam 1: 0\L =x\L d1 scratch[start+x]=max jy g(ix,jy) \L = EQ\RA{}
\LA{}mam 2: 0\L =x\L d1 scratch[start+d+x]=j1(x)=unique j g(ix,j) =EQ\RA{}
\LA{}mam 3: scratch[start]=k0=max ix f(ix,j1(x)) \L = EQ\RA{}
\LA{}mam 4: 0\L =y\L d2 scratch[start+d+y]=ly=max jx, 0\L =x\L d2, g(k0+y,jx)\L =EQ\RA{}
\LA{}mam 5: scratch[start..]= unique p=k0+y,q=ly+x, g(p,q)=f(p,q)=EQ\RA{}
\LA{}mam 6: newhood[start..]= hood[start..p] catenated hood[q..start+d-1]\RA{}

\nwendcode{}\nwbegincode{29}\moddef{mam 0: intialisations}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
        /******************************
         * match_and_merge ()
         ******************************/

__global__ void match_and_merge ( float2 * hood, float2 * newhood,
        short * scratch )
\{
  int i, j, pindex, qindex, shift;
  int d1, d2, d, start, x, y, indx;

  d1 = blockDim.x;
  d2 = blockDim.y;
  d = d1 * d2;
  start = blockIdx.x * 2 * d;

  x = threadIdx.x;
  y = threadIdx.y;
  indx = x + d1 * y;

  pindex = qindex = -1;

  scratch[ start + indx     ] = -1;
  scratch[ start + indx + d ] = -1;

  __syncthreads();

  i = start + d2 * x;

\nwendcode{}\nwbegincode{30}\moddef{mam 1: 0\L =x\L d1 scratch[start+x]=max jy g(ix,jy) \L = EQ}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
  if ( hood[i].x <= 1.0 ) /* not REMOTE */
  \{
      j = start + d + d1 * y;

        /*
         * The condition below should identify the
         * unique interval of H(Q) touching the
         * tangent from hood[i].
         */

        if ( g(hood,i,j,start,d) <= EQUAL &&
           ( y == d2 - 1 ||
             hood[j+d1].x > 1.0 ||
             g(hood,i,j+d1,start,d) == HIGH )
         )
        scratch[ start+x ] = j;
  \}

  __syncthreads();

\nwendcode{}\nwbegincode{31}\moddef{mam 2: 0\L =x\L d1 scratch[start+d+x]=j1(x)=unique j g(ix,j) =EQ}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
  if ( hood[i].x <= 1.0 )
  \{
    j = scratch[start + x] + y;

    if ( g(hood,i,j,start,d) == EQUAL )
      scratch[start + d  + x] = j;
    else if ( d2 < d1 && g(hood,i,j+d2,start,d) == EQUAL )
      scratch[start + d + x] = j+d2;
  \}

  __syncthreads();
\nwendcode{}\nwbegindocs{32}\nwdocspar
{\sc Suppose that} $p$ and $q$ are the actual
corners to be calculated, supporting the common tangent to
$H(P)$ and $H(Q)$.
For each sample point $p_i$ a corresponding
tangent corner $q_i'$ on $H(Q)$ has been calculated.

\begin{theorem}
The tangent corners $q_i'$ occur in nondecreasing
left-to-right order, and $p_i$ is left of, equal to,
or right of $p$ according as $f(p_i,q_i')$ is
{\tt LOW,} {\tt EQUAL,} or {\tt HIGH}.
\end{theorem}

{\bf Sketch proof.}  Parametrise the tangents
to $H(Q)$ by the angle $\theta$ they make with the
$x$-axis:
$\theta$ varies over the clockwise interval from $90^\circ$
(yielding the left vertical tangent) to $-90^\circ$.

\begin{wrapfigure}{r}{2.7in}
\centerline{\includegraphics[width=2.5in]{figures/monot}}
\caption{$L_\theta$.}
\label{fig: monot}
\end{wrapfigure}

For each $\theta$, let $L_\theta$ be the half-plane
left of the tangent line at angle $\theta$
(except at $\pm 90^\circ$, this means above the tangent line).
The map $\theta\to L_\theta$ is, loosely speaking,
continuous, and $H(P)\cap L_\theta$ contracts
with $\theta$.  The point of contact between
$L_\theta$ and $H(Q)$ shifts discontinuously from
corner to corner, but always rightward.
At a unique angle, $\theta=\alpha$, say, the
intersection contains a single point, and that
point is $p$.  The points $p_i$ under consideration
are left and right endpoints of various sets
$H(P)\cap L_\theta$, the points $q'_i$
are points of contact between various $L_\theta$
and $H(Q)$, and the points $p_i$ are left of,
at, or right of $p$ according to
the values of $f(p_i,q'_i)$.\qed

\nwenddocs{}\nwbegincode{33}\moddef{mam 3: scratch[start]=k0=max ix f(ix,j1(x)) \L = EQ}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
  j = scratch[start+d+x];
  if ( hood[i].x <= 1.0 &&
         f(hood,i,j,start,d) <= EQUAL &&
         ( x == d1-1 ||
           hood[i+d2].x > 1.0 ||
           f(hood,i+d2,scratch[start + d + x + 1],start,d) == HIGH
         )
     )
  scratch[start] = i;

  __syncthreads();

\nwendcode{}\nwbegincode{34}\moddef{mam 4: 0\L =y\L d2 scratch[start+d+y]=ly=max jx, 0\L =x\L d2, g(k0+y,jx)\L =EQ}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
  i = scratch[start] + y;

  if ( hood[i].x <= 1.0 ) /* not REMOTE */
  \{
    j = start + d + x * d2;
    if ( g(hood,i,j,start,d) <= EQUAL &&
      ( x == d1 - 1 ||
        hood[j+d2].x > 1.0 ||
        g(hood,i,j+d2,start,d) == HIGH )
      )
      scratch[start + d + y] = j;
  \}

  __syncthreads();

\nwendcode{}\nwbegincode{35}\moddef{mam 5: scratch[start..]= unique p=k0+y,q=ly+x, g(p,q)=f(p,q)=EQ}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
  j = scratch[ start + d + y ] + x;

    if ( x < d2 &&
        g(hood,i,j,start,d) == EQUAL
        &&
        f(hood,i,j,start,d) == EQUAL )
    \{
      scratch [start    ] = i;
      scratch [start + 1] = j;
    \}

  __syncthreads();

\nwendcode{}\nwbegincode{36}\moddef{mam 6: newhood[start..]= hood[start..p] catenated hood[q..start+d-1]}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
  pindex = scratch [ start     ];
  qindex = scratch [ start + 1 ];

  newhood [ start + indx ] = hood[ start + indx ];
  make_remote ( & ( newhood [ start + d + indx ] ) );
  __syncthreads();

\nwendcode{}\nwbegindocs{37}\nwdocspar
Let $s$ be the 'shift', {\tt qindex-pindex-1.}\hfil\break
Then {\tt hood[qindex\ldots start+2*d-1]} is copied, shifted
left by $s$, to\hfil\break
{\tt newhood[pindex+1\ldots]}.

\nwenddocs{}\nwbegincode{38}\moddef{mam 6: newhood[start..]= hood[start..p] catenated hood[q..start+d-1]}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
  shift = qindex - pindex - 1;

  if ( start + d + indx >= qindex )
    newhood [ start + d + indx - shift ] = hood [ start + d + indx ];

  __syncthreads();

\nwendcode{}\nwbegindocs{39}\nwdocspar
Final closing brace in match and merge.
\nwenddocs{}\nwbegincode{40}\moddef{match and merge}\plusendmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
\}

\nwendcode{}\nwbegincode{41}\moddef{wagener.Makefile}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
.SUFFIXES: .nw .tex .c

wagener: wagener.nw
        /usr/bin/notangle -Rwagener -L wagener.nw > wagener.cu

dvi: wagener.nw
        /usr/bin/noweave -delay wagener.nw > wagener.tex
        latex wagener
        latex wagener
        rm wagener.out wagener.aux

clean:
        rm *.c *.dvi *.log
\nwendcode{}\nwbegindocs{42}\nwdocspar
\begin{figure}
\centerline{\includegraphics[width=3in]{figures/cuda1024}}
\caption{Sample cuda output, 1024 points}
\label{fig: cuda1024}
\end{figure}

\section{Conclusions}

Wagener's PRAM algorithm, published only as a manuscript,
is very clean and simple in comparison, for example, with
another $O(\log n)$ algorithm in [\ref{acgoy}].

Our program illustrates how Wagener's PRAM algorithm might be realised
on a CUDA chip: the organisation, at any rate, is faithful to
the model.  However, it is insensitive to the memory
bank conflicts which make the chip, although robust enough
to tolerate these conflicts, so slow that the parallel program
is slow by comparison with another serial program (not described here).

On the other hand, we tried to avoid branching, another reason
for serialisation, and the writing of branch-free code is an
interesting challenge.

Another possible innovation was our usage of padding, rather
than compression, which we felt too cumbersome.  That is,
data would be in blocks, with `live' data to the left of the block
padded with `remote' values  on the right.  This left some threads
with nothing to do, but it avoided allocation tasks.

A few last words about optimal speedup.  Our algorithm gets
the data points in sorted order, and in principle should use
$O(n)$ work (runtime $\times$ processor count): but it uses
$O(n\log n)$.  We indicate how Wagener's algorithm can achieve optimal
speedup:
$O(\log n)$ time and $O(n)$ work.  So we suppose we have $n$
data points and $n/(\log_2 n)$ processors.

\begin{itemize}
\item
Separate the data into $n/\log n$ strips, 1 per processor,
and compute the convex hood in each strip, $O(\log n)$ time
serially.
\item
Store the hood corners in each strip (in left-to-right order)
in balanced trees of size $\leq \log n$.
\item
Overmars and Van Leeuwen devised a logarithmic time
procedure, a balanced search, for locating common tangents:
see [\ref{acgoy},\ref{od}].
Applying their procedure to convex
hoods stored in balanced trees, convex hoods can be merged in
logarithmic time.
\item
This means that with $\log \log n$ passes using $\leq n/\log n$
processors per pass, convex hoods can be calculated for
$n/\log^2 n$ strips each containing $\log^2 n$ points,
each in time $O(\log\log n)$, hence $O((\log \log n)^2)$ overall,
which is of course $O(\log n)$.
\item
Under the PRAM model, these trees can be flattened
into arrays using $\log n$ processors per tree.
Now we have the same organisation as in our Cuda
algorithm, with strips of $\log^2 n$ points each
stored in an array.
\item
Our implementation involved
finding the common tangent between adjacent hoods
using $k$ processors for hoods of size (at most) $k$,
in $O(1)$ time.

Given $k \geq \log^2 n$, this
can
be done with $k/\log n$ processors.  In this
case there are at least $\sqrt{k}$ processors available.
Let $h = \sqrt[4]{k}$, and let $P$ be the points in
the left-hand strip and $Q$ the points on the right.
Subdivide $H(P)$ into $k/h$ intervals of length $h$.
For each interval endpoint $p$, allocate $h$ processors
which first inspect intervals in $H(Q)$ of length
$k/h$, bracketing the tangent from $p$ to one of
these intervals; next they bracket the tangent to
an interval of length $k/h^2$, then $k/h^3$, and
finally return the tangent from $p$ to $H(Q)$.
This brackets the common tangent endpoint in $H(P)$
to an interval of length $k/h$; repeat the process
to bracket to intervals of length $k/h^2$ and $k/h^3$, and
finally compute the common tangent.
\end{itemize}

When run on the dataset illustrated, our CUDA algorithm
is perceptibly slower by comparison with a serial algorithm
(which is not described here).  This is not surprising
considering the serialisation of conflicting memory accesses.
To attempt optimal speedup as described here would
demand a great deal of effort.  Our CUDA program is a specimen
implementation of a PRAM algorithm which cannot claim much
speed advantage.

\section{References}

\begin{enumerate}
\item
\label{acgoy}
`Parallel Computational Geometry,' with Alok Aggarwal, Bernard Chazelle,
Leo Guibas, and Chee-Keng Yap (1988).
{\em Algorithmica \bf 3}, 293-327  (special issue on Parallel Processing).

\item
\label{od}
\lq Some parallel geometric algorithms' (1993), in
{\em Lectures on Parallel Computation,} ed.\ Alan Gibbons
and Paul Spirakis, Cambridge University Press,
77--108.

\item
\label{wagener}
H. Wagener (1985). Optimally parallel algorithms for
convex hull determination.  Manuscript, Technical University
of Berlin.
\end{enumerate}

\end{document}
\nwenddocs{}

redpajama_set_name: RedPajamaArXiv


text:
package org.apache.sling.jms.impl;

import java.io.Closeable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

import javax.annotation.Nonnull;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.sling.jms.ConnectionFactoryService;
import org.apache.sling.mom.MessageFilter;
import org.apache.sling.mom.QueueManager;
import org.apache.sling.mom.QueueReader;
import org.apache.sling.mom.RequeueMessageException;
import org.apache.sling.mom.Types;
import org.osgi.framework.ServiceReference;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * A JMS implementation of a QueueManager. It will allow callers to add messages to named queues, and consumers to read
 * messages from named queues in order. The component uses a single connection to the JMS broker, but dedicated sessions
 * for each send and for each Queue reader.
 */
@Component(immediate = true, service = QueueManager.class)
public class JMSQueueManager implements QueueManager {

    private static final Logger LOGGER = LoggerFactory.getLogger(JMSQueueManager.class);
    private static final String NRETRIES = "_nr";
    private static final Set<String> INTERNAL_PROPS = Collections.singleton(NRETRIES);

    @Reference
    private ConnectionFactoryService connectionFactoryService;

    /**
     * Holds all QueueReader registrations.
     */
    private final Map<ServiceReference<QueueReader>, QueueReaderHolder> registrations =
            new ConcurrentHashMap<ServiceReference<QueueReader>, QueueReaderHolder>();

    private Connection connection;

    @Activate
    public synchronized void activate() throws JMSException {
        connection = connectionFactoryService.getConnectionFactory().createConnection();
        connection.start();
    }

    @Deactivate
    public synchronized void deactivate() throws JMSException {
        for ( Map.Entry<ServiceReference<QueueReader>, QueueReaderHolder> e : registrations.entrySet()) {
            e.getValue().close();
        }
        registrations.clear();
        connection.stop();
        connection.close();
    }

    /**
     * Add a message to the queue. The message is added to the queue transactionally and auto acknowledged.
     * @param name the name of the queue.
     * @param message the message to post to the queue.
     */
    @Override
    public void add(@Nonnull Types.QueueName name, @Nonnull Map<String, Object> message) {
        Session session = null;
        try {
            session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
            //TODO Instead of copy do addition at JSON writer level
            Map<String, Object> msgCopy = new HashMap<>(message);
            msgCopy.put(NRETRIES, 0L); // set the number of retries to 0.
            TextMessage textMessage = session.createTextMessage(Json.toJson(msgCopy));
            textMessage.setJMSType(JMSMessageTypes.JSON.toString());
            LOGGER.info("Sending to {} message {} ", name, textMessage);
            session.createProducer(session.createQueue(name.toString())).send(textMessage);
            session.commit();
            session.close();
        } catch (JMSException e) {
            LOGGER.error("Unable to send message to queue "+name, e);
            close(session);

        }

    }

    /**
     * quietly close the session.
     * @param session
     */
    private void close(Session session) {
        if(session != null) {
            try {
                session.close();
            } catch (JMSException e) {
                LOGGER.warn("Unable to close session ",e);
            }
        }
    }

    // Register Readers using OSGi Whiteboard pattern
    @Reference(service = QueueReader.class,
            cardinality = ReferenceCardinality.MULTIPLE,
            policy = ReferencePolicy.DYNAMIC,
            unbind="removeReader")
    public synchronized  void addReader(ServiceReference<QueueReader> serviceRef) {
        if (registrations.containsKey(serviceRef)) {
            LOGGER.error("Registration for service reference is already present {}",serviceRef);
            return;
        }
        QueueReaderHolder queueReaderHolder = new QueueReaderHolder(connection, serviceRef.getBundle().getBundleContext().getService(serviceRef), getServiceProperties(serviceRef));
        registrations.put(serviceRef, queueReaderHolder);
    }

    private Map<String, Object> getServiceProperties(ServiceReference<QueueReader> serviceRef) {
        Map<String, Object> m = new HashMap<String, Object>();
        for ( String k : serviceRef.getPropertyKeys()) {
            m.put(k, serviceRef.getProperty(k));
        }
        return Collections.unmodifiableMap(m);
    }

    public synchronized void removeReader(ServiceReference<QueueReader> serviceRef) {
        QueueReaderHolder queueReaderHolder = registrations.remove(serviceRef);
        if ( queueReaderHolder != null) {
            queueReaderHolder.close();
        }
    }

    private static class QueueReaderHolder implements Closeable {
        private final JMSQueueSession session;

        public QueueReaderHolder(Connection connection, QueueReader queueReader, Map<String, Object> properties) {
            try {
                LOGGER.info("Creating Queue holder for {} ", queueReader.getClass());
                String name = (String) properties.get(QueueReader.QUEUE_NAME_PROP);
                checkNotNull(name, "A valid queue name as property " + QueueReader.QUEUE_NAME_PROP + " is required for QueueReader registration");
                if (queueReader instanceof MessageFilter) {
                    session = new JMSQueueSession(connection, queueReader, name, (MessageFilter) queueReader, true, 5);
                } else {
                    session = new JMSQueueSession(connection, queueReader, name, new MessageFilter() {
                        @Override
                        public boolean accept(Types.Name name, Map<String, Object> mapMessage) {
                            return true;
                        }

                    }, true, 5);

                }
            } catch (JMSException e) {
                throw new IllegalArgumentException("Unable to register QueueReader with JMS ",e);
            }

        }

        @Override
        public void close() {
            try {
                session.close();
            } catch ( Exception e ) {
                LOGGER.debug("Exception when closing session.",e);
            }
        }
    }

    private static void checkNotNull(Object v, String message) {
        if ( v == null) {
            throw new IllegalArgumentException(message);
        }
    }

    private static Map<String,Object> filter(Map<String, Object> map) {
        //Filter out internal properties
        for (String internalKey : INTERNAL_PROPS){
            map.remove(internalKey);
        }
        return map;
    }

    public static class JMSQueueSession implements Closeable, MessageListener {
        private static final Logger LOGGER = LoggerFactory.getLogger(JMSQueueSession.class);
        private final QueueReader queueReader;
        private final String name;
        private final MessageFilter messageFilter;
        private final Session session;
        private final MessageConsumer queueConsumer;
        private final MessageProducer queueProducer;
        private boolean retryByRequeue;
        private int maxRetries;

        public JMSQueueSession(Connection connection, QueueReader queueReader, String name,  MessageFilter messageFilter, boolean retryByRequeue, int maxRetries) throws JMSException {
            this.queueReader = queueReader;
            this.name = name;
            this.messageFilter = messageFilter;
            this.retryByRequeue = retryByRequeue;
            this.maxRetries = maxRetries;
            session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
            Queue queue = session.createQueue(name);
            queueConsumer = session.createConsumer(queue);
            queueProducer = session.createProducer(queue);
            queueConsumer.setMessageListener(this);
        }

        @Override
        public void close() {
            if ( queueConsumer != null) {
                try {
                    queueConsumer.close();
                } catch (JMSException e) {
                    LOGGER.warn("Failed to close queue consumer on "+name,e);
                }
            }
            if ( session != null) {
                try {
                    session.close();
                } catch (JMSException e) {
                    LOGGER.warn("Failed to close queue session on " + name, e);
                }
            }

        }

        @Override
        public void onMessage(Message message) {
            boolean committed = false;
            TextMessage textMessage = null;
            try {
                try {
                    LOGGER.info("Got from {} message {} ", name, message);
                    Destination destination = message.getJMSDestination();
                    if (destination instanceof Queue) {
                        Queue queue = (Queue) destination;
                        if ( JMSMessageTypes.JSON.equals(JMSMessageTypes.valueOf(message.getJMSType()))) {
                            textMessage = (TextMessage) message;
                            final Map<String, Object> mapMessage = Json.toMap(textMessage.getText());
                            Types.QueueName queueName = Types.queueName(queue.getQueueName());
                            if (queueName.equals(name) && messageFilter.accept(queueName, mapMessage)) {
                                queueReader.onMessage(queueName, filter(mapMessage));
                                session.commit();
                                // all ok.
                                committed = true;
                                return;
                            }
                        }
                    }
                } catch (RequeueMessageException e) {
                    LOGGER.info("QueueReader requested requeue of message ", e);
                    if (retryByRequeue && textMessage != null) {
                        Map<String, Object> mapMessage = Json.toMap(textMessage.getText());
                        if ((long)mapMessage.get(NRETRIES) < maxRetries) {
                            mapMessage.put(NRETRIES, ((long) mapMessage.get(NRETRIES)) + 1);
                            TextMessage retryMessage = session.createTextMessage(Json.toJson(mapMessage));
                            retryMessage.setJMSType(JMSMessageTypes.JSON.toString());
                            LOGGER.info("Retrying message Sending to {} message {} ", name, textMessage);
                            queueProducer.send(retryMessage);
                            session.commit();
                            committed = true;
                            return;
                        }
                    }
                }
            } catch (JMSException e) {
                LOGGER.info("Receive failed leaving to provider to require if required. ", e);
            } finally {
                try {
                    if (!committed) {
                        session.rollback();
                    }
                } catch (JMSException e) {
                    LOGGER.info("QueueReader rollback failed. ",e);
                }
            }
            // If onMessage throws an exception JMS will put the message back onto the queue.
            // the delay before it gets retried is a JMS server configuration.
            throw new IllegalArgumentException("Unable to process message, requeue");
        }

    }

}

redpajama_set_name: RedPajamaGithub


text:
Sopot is a small river in Poland. It originates near the Majdan Sopocki village and flows through Roztocze hills, passing through villages of Ciotusza Stara, Nowiny, Hamernia, and Osuchy. It is a tributary of Tanew.

The river flows through the Polish Landscape Park of Puszcza Solska and the Czartowe Pole nature preserve.

Rivers of Poland
Rivers of Lublin Voivodeship


text:
Podcast #86: Come Along with Us on Our Walking Tour of Damage and Recovery of Big Basin Redwoods State Park
This episode of All Hazards (#86) takes you on a walking tour of Big Basin Redwoods State Park. The CZU Complex fire burned nearly all of the 18,000-acre park beginning in August, 2020, a significant portion of the 86,000 acres that burned in the Santa Cruz Mountains. The good news is most of the massive redwoods survived; however, the park's infrastructure is gone. Our guide, Joanne Kerbavaz, is a senior environmental scientist with California State Parks. Learn about the damage done, and how the miracles of nature are evident in new life after wildfires.
We also created a video of our tour of Big Basin for the one-year anniversary of the day the fire ripped through the park, which you can see here: https://wp.me/pd8T7h-6sn
Big Basin Redwoods State Park contains more than 18,000 acres of redwood forest including the largest ancient redwood grove south of San Francisco
CZU August Lightning Complex Fire = devastating structural losses including the destruction of the park's historic headquarters, campgrounds, and the newly renovated Nature Museum.
You can help. Click here for how: Donate to MPF's Big Basin Recovery Fund
Sempervirens Fund is California's first land trust and the only organization dedicated exclusively to protecting the redwood forests of the Santa Cruz Mountains. Save the Redwoods League is a nonprofit organization whose mission is to protect and restore California redwoods and connect people to the peace and beauty of redwood forests. Together they are raising support for the Big Basin Recovery Fund, with 100% of proceeds going to California State Parks for the immediate recovery of Big Basin Redwoods State Park. This fund will lay the groundwork for the long-term rebuilding of this treasure of the California State Parks system.
Donate to Save the Redwoods League to support the Big Basin Recovery Fund
Sempervirens Fund has also created a Santa Cruz Redwoods Restoration Fund to restore redwoods in the rest of the Santa Cruz mountains affected by the wildfires.
Donate to Sempervirens Fund to support the Santa Cruz Redwoods Restoration Fund
Friends of Santa Cruz State Parks (Friends) is a vital partner with California State Parks, creatively working to ensure our cherished local parks and beaches are thriving and available to all. They are creating the Friends Fire Relief Fund for direct, short-term assistance as well as longer-term recovery efforts at Big Basin Redwoods State Park and other parks in the Santa Cruz Mountains impacted by the CZU Lightning Complex Fires.
Donate to Friends Fire Relief Fund
Take a listen to our first podcast episode on Big Basin, recorded just weeks after the fire was contained.
http://www.oesnews.com/podcast-czu-torches-big-basin-redwoods-we-will-make-memories-here-again/