text:
Join our Rewards Program Log in See your CB Passport Log out
Cape Verde in Lisbon: Taste
By Francesca Savoldi and Syma Tariq
On a narrow and, until recently, slightly forgotten street in Lisbon's city center, a simple Cape Verdean eatery is holding its own. As one of the few tascas serving up African dishes in this part of town, Tambarina, with its dozen tables and keyboard and mics set up in the corner, bears testimony to this urban quarter's historical connections to the people of Africa's northwestern archipelago.
Rua Poço dos Negros – a street with an ambiguous name possibly relating to the dumping of slaves' bodies here centuries ago – is on the border of what until two decades ago was known as "the triangle," an area extending to São Bento and which in the 1970s became home to a new group of migrant Cape Verdeans. The triangle saw one of the few waves of substantial migration from the colonized islands to the metropolis of the former empire and is nowadays a mix of old multi-family houses – once belonging to the working classes – and new condominiums. Only a few members of the Cape Verdean community remain here; the majority of them now live in the city's peripheral zones such as Amadora, Oeiras and Portela.
Domingos de Brito, owner of Tambarina, is one of the few who stayed. Like many others at the time, he arrived from the island of Santiago in 1971 at age 18 to work in construction. His roots are solid in the neighborhood, where he also ran a small enterprise exporting products (including food and clothing) to Cape Verde. Domingos opened the restaurant in 2011 and had to contend with the pressures of prejudice from neighbors and even the police. "When I opened it was a bit complicated; for an African it is hard to progress in Portugal due to discrimination," he says. "But now, as I know everyone in the neighborhood, everything is fluid." In this sense, the name is spot on: Tambarina is a tree that resists difficult conditions, especially drought – a periodic calamity in Cape Verde.
From the start, Tambarina has served up particularly tasty dishes thanks to Domingo's already extensive culinary experience – as the last of seven brothers, he helped his mother in the kitchen from an early age.
The star dish here is cachupa: the pride of Cape Verdean gastronomy, this slow-cooked stew is made mainly of hominy, beans, cassava, sweet potato and fish or meat (sausage, beef, goat or chicken). In Cape Verde, the dish comes in many forms. At Tambarina, Domingo makes meat, tuna and even vegetarian versions. "The best thing for breakfast is cachupa refogada, re-frying leftovers with eggs and good quality pork sausage [linguiça]." The irony, he says, is that cachupa pobre – the modest version made only with fish –is a far superior dish to cachupa rica – which uses several kinds of meat and is expensive in the archipelago. The key, he says, is that the onions are sautéed in lard.
Cachupa is a dish with 500 years of history in Cape Verde and symbolizes the planting of corn and all the practices, techniques and accumulation of knowledge related to it. The ritual of its preparation evokes a sense of belonging and hospitality. More than any other dish, cachupa reveals an authentic expression of Cape Verdean identity.
Some etymologists relate the term "cachupa" to the Spanish cachupina, which refers to the gathering of people around music – a context that could be confirmed by the omnipresence of live music in Cape Verdean restaurants. Tambarina hosts mini-concerts from Thursdays to Sundays: batuque, funaná, colá, coladeira or morna musical styles blare from the speakers, transforming the restaurant into a party after dinner. It's at this moment of the evening where Domingos usually goes to drag chef Augusta out of the kitchen to dance. "Music from Cape Verde is very sought after. All the genres have especially good rhythms and are lively; if you feel a bit sad, you listen to funaná, and you forget everything!"
Apart from the cachupa, which sings with flavor, Tambarina also specializes in chicken cooked with beer, grilled fish, tuna belly, veal with cassava and delicious corn pastries. All of these can be washed down with Cape Verdean grog (also grogue in Creole), which is made of a rum distilled from sugar cane from Santo Antão and Santiago islands. Like many of the ingredients that ended up in the archipelago, the abundance of sugar cane in Cape Verde was a consequence of colonization and the slave trade. In typical experimental style, Domingos also makes his own homemade punch, a recipe learned from his father: grog, sugarcane honey ("Not sugar!" he insists), lemon and a secret ingredient he won't reveal. Whatever it is, it certainly goes well with the music.
Rua do Poço dos Negros 94, São Bento
Hours: 9am-2am
March 29, 2017 Post-Colonial Lisbon: Cape Verde Edition (0)
Once the hub of a trading empire that connected Macau in the east to Rio de Janeiro in […] Posted in Lisbon
March 19, 2017 Cape Verde in Lisbon: History (0)
Cape Verdeans, particularly those from the island of Santiago, form one of the biggest […] Posted in Lisbon
March 19, 2017 Cape Verde in Lisbon: Go Deep (0)
On the last floor of a high building in Marquês de Pombal – Lisbon's financial and […] Posted in Lisbon
Francesca Savoldi and Syma Tariq
Francesca Savoldi
Post-Colonial Lisbon: Cape Verde Edition
Lisbon | By Francesca Savoldi and Syma Tariq
LisbonOnce the hub of a trading empire that connected Macau in the east to Rio de Janeiro in the west, Lisbon today can at times feel like a sleepy town of nostalgic storefronts and scenic churches. But that's only its façade. Take a closer look and you'll discover a city that still maintains deep-rooted links…
Cape Verde in Lisbon: History
LisbonCape Verdeans, particularly those from the island of Santiago, form one of the biggest migrant communities in Portugal. Because of the cyclical drought that afflicts the 10 volcanic islands making up this archipelago, the country's sense of homeland coexists with the idea of movement, with Cape Verde recognized by many as an essentially diasporic nation.…
Cape Verde in Lisbon: Go Deep
LisbonOn the last floor of a high building in Marquês de Pombal – Lisbon's financial and commercial area – is the headquarters of the Associação Cabo Verde, the oldest of its kind in the capital. Its unexpected location aside, it draws many from the community who need support with issues relating to law and integration…


Have you decided to begin your oral healthcare journey with Premier Family Dental? Dr. Cofer and the rest of our team are looking forward to meeting you! Before you arrive for the first time, there is some important information that we'd like for you to know about the necessary paperwork, our payment options, and more. If you have any questions or concerns, you are always welcome to contact our Central Texas practice directly.
At your initial appointment, our team's top goal will be to help you feel comfortable, well cared for, and confident about your smile's bright future. After our front desk team has confirmed that you have completed all of the necessary paperwork, you'll be brought back to the treatment room for X-rays, a comprehensive examination with Dr. Cofer, and a refreshing cleaning. We will discuss any concerning findings with you in detail and help you determine the treatment options that are a good fit for your current situation. Then, all that's left to do is hammer out any financial questions and get you on the schedule for future appointments!
Our team understands how valuable your time is, and we enjoy saving it for you whenever possible. For added convenience, new patients can complete all of the paperwork they'll need before they even get to our office! Just follow the links below to download the forms and print them out at home. After writing in your information, all you have to do is remember to bring them with you to your first visit.
Trying to navigate your dental insurance coverage can be headache-inducing at times, which is why you should let the Premier Family Dental team do the heavy lifting for you. We accept virtually all of the major PPO insurance plans found here in Central Texas (including the ones offered by Waco's biggest employers) and will file claims on your behalf in order to maximize your available benefit. We enjoy making this process smooth and stress-free for patients!
Other welcomed payment options include cash, checks, Discover, MasterCard, and Visa.
No dental insurance? That shouldn't keep you from receiving the care you need without straining your wallet. Our team is happy to work with flexible financing plans through both CareCredit and Compassionate Finance. Both options can break down your overall cost into manageable monthly payments with little to NO interest attached.


text:
ЮПТП / Без рубрики / PortsLock Crack With Full Keygen [Win/Mac] (2022) 📌
PortsLock Crack With Full Keygen [Win/Mac] (2022) 📌
PortsLock Crack +
■ Newly released Windows vista from Microsoft XP. (it works with all latest version)
■ Only Windows XP series (it works with all latest version)
■ Users will not see any nag screen while running this firewall.
■ No Download or Install Necessary.
Tested on Windows XP SP3 and Windows Vista SP1
If you are satisfied, please rate the app. If you have any problem, Please let me know.
Thanks for your support■
Stunt Warfare Extreme is the first game in the Stunt Warfare series and it features all new challenges and upgrades for the original Stunt Warfare game to keep players entertained for hours at a time!
All the best challenges from Stunt Warfare have been combined with the new Intrusion and Exploration game modes for new and experienced players to enjoy. Combat and predator missions that bring adrenaline rushing and new gameplay elements are now available to players.
In Stunt Warfare Extreme players will take the role of a highly trained mercenary called a Handler. Players are equipped with all the best weapons, the most advanced vehicles and access to all the best equipment available.
You are able to access the bigger and better challenges by earning Achievements and the best prize of all money. The best players could even win a big cash prize!
Stunt Warfare Extreme includes the hugely successful new mode entitled Intrusion. In this new mode players must enter and destroy the enemy base or data centre in a stealth-like invasion of the game.
Stunt Warfare Extreme also includes the new Exploration game mode. This new game mode has been in development for quite some time and is now being brought to life. In this new mode players will be required to explore dangerous, off road locations all over the world. Those locations will be filled with deadly traps, collapsing buildings, mines and traps! It's an incredibly exciting experience.
Stunt Warfare Extreme features many of the game's returning characters and lets players do their favourite activities like star-gazing, hunting, fishing and more! All these activities and more are updated with new special effects and graphics.
Stunt Warfare Extreme runs on Windows 7 and the Windows 8 osx. The game is very easy to use. You simply launch the game and you are ready to play.
Six Achievements.
Two New Game Modes: Intrusion and Exploration.
The returning "mission" game mode.
New Units and VEHICLES: Buggy
PortsLock With Key [Win/Mac] [Latest] 2022
■ Runs on Windows NT/2000/XP
■ Adds security to Windows TCP/IP/Sockets to allow you to set the security rules of your TCP/IP session control the access of the users to the protocols you specify (HTTP, FTP, SMTP, POP3, Telnet, etc.)
■ Simple, transparent to users, but not for users without administrative privileges.
■ Portable: It is possible to run PortsLock Cracked 2022 Latest Version in offline mode.
■ Prerequisite: MBAM, McAfee, or other similar antimalware products.
■ MSDN/VPC download:
PortsLock Crack For Windows Requirements:
■ Windows 98/ME/2000/XP/2003
■ Download:
PortsLock For Windows 10 Crack View:
■ RedHat/CentOS Linux 4.0.x
■ Ubuntu
■ Debian/Ubuntu
■ Windows NT/2000/XP/2003
■ Windows 2003/XP
■ Windows Vista
PortsLock
PortsLock Crack License Key
PortsLock will allow you to block TCP and UDP ports on a Windows NT/2000/XP computer. You can control the port and IP addresses that are allowed to access the computer from the outside. You can also block incoming and outgoing IP addresses from a specific IP address. You can set the access control rule either based on day/night (time-of-day) or weekday/weekend (day-of-week). Furthermore, you can add restrictions for the allowed and denied ranges of ports and IP addresses.
PortsLock 6 is an easy-to-install, free firewall with user-level access control, which will let you block certain incoming and outgoing applications, any TCP/UDP ports, and IP addresses, based on time, day, and weekend. It will also let you to prevent multiple requests to a single IP.
• User-level access control
• Individually blocked applications
• Port and IP address blocked
• Settings are time-based
• Port-range-based
• Easily customizable
• Easy-to-deploy
[Editor's note: this version of the Hotfile Rapidshare Scanner is intended for the most common file sharing networks, including Rapidshare, and allows you to scan many files at once. But, just to make sure, we have also included some other useful software tools which are required for many security and Internet penetration related tasks. This complete suite includes a professional Remote Desktop Software, an Internet Security Software, a Torrent Downloader as well as a Web Search tool.] You are about to find out that you can get all the Best Internet Security Software (VPN) plus Torrent Downloading software all in one download. Well…this is actually the best torrent downloader software that is available for Windows. That is because it was specifically designed to make torrent downloading fast and easy. This Windows Torrent downloader is known as Shareware Torrent Downloader Pro.
Why Shareware Torrent Downloader Pro is the Best Torrent Downloader Software:
1. Speed — When you load torrent files with it, you can be rest assured that the speed of transmission will not be any slower than with the torrents on the regular bittorrent network
2. Automatically download any torrents — You simply select the torrents you wish to download, enter the magnet/torrent link, click «Start» and before long you will have the torrent file downloaded and ready to be copied to your PC.
3. Speed — You
PortsLock is a firewall with user-level access controls for Windows NT/2000/XP. Once PortsLock is installed, administrators can assign permissions to TCP/IP connections, just as they would in managing permissions on an NTFS partition of a hard disk. It lets you control which users can access what TCP/IP based protocols (HTTP, FTP, SMTP, POP3, Telnet, etc.) on a local computer, depending on the time of day and day of the week. You can also set allowed/denied TCP/UDP ports and IP addresses for incoming and outgoing connections.
PortsLock is a useful security tool that lets you to block ports and much more.
Keep in mind that almost 80% of all security breaches come from the inside! PortsLock enhances access control possibilities for system administrators, helps them to build a more secure network environment, and protects corporate networks against attacks from the inside.
PortsLock is absolutely transparent to users. Users do not have to set up rules in their applications to use the network. Only administrators are allowed to set rules so users without administrative privileges cannot bypass the PortsLock security. It is important to note that PortsLock works perfectly with other personal firewalls and routers installed on the same computer.
PortsLock is absolutely transparent to users. Users do not have to set up rules in their applications to use the network. Only administrators are allowed to set rules so users without administrative privileges cannot bypass the PortsLock security. It is important to note that PortsLock works perfectly with other personal firewalls and routers
In order to experience the full beauty of the
game, you should have a high-end PC and at least 1 GB of RAM to
experience the game at its best.
In order to experience the full beauty of the game, you should have a high-end PC and at least 1 GB of RAM to experience the game at its best. Required Software:
Microsoft Windows 7, 8 or 10 with DirectX 11, and an Nvidia GeForce GTX 980 or equivalent AMD equivalent (vsync disabled) graphics card.
Microsoft Windows 7, 8
← UPC Generator Crack Full Version [Mac/Win] (Latest)
Lalnview Crack Keygen Full Version Free →

redpajama_set_name: RedPajamaCommonCrawl


text:
Orsini, Francesca (2015) 'The Multilingual Local in World Literature.' Comparative Literature, 67 (4). pp. 345-374.
Available under License Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 (CC BY-NC-ND 4.0).
This essay questions the geographical categories used to underpin current theoretical and methodological approaches to "world literature," which end up making nine-tenths of the world, and of literature produced in the world, drop off the world map or appear "peripheral." Focusing on the multilingual north Indian region of Awadh in the early modern period, it argues that an approach to literature and space that takes multilingualism within society and literary culture as a structuring and generative principle and holds both local and cosmopolitan perspectives in view is more productive for world literature than approaches based only on cosmopolitan perspectives of circulation and recognition.
Legacy Departments > Faculty of Languages and Cultures > Department of the Languages and Cultures of South Asia
© 2015 by University of Oregon. This is the accepted manuscript of an article published by Duke University Press in Comparative Literature, available online, https://doi.org/10.1215/00104124-3327481
https://doi.org/10.1215/00104124-3327481
1,299Downloads


text:
El municipio de Hendricks (en inglés: Hendricks Township) es un municipio ubicado en el condado de Mackinac en el estado estadounidense de Míchigan. En el año 2010 tenía una población de 153 habitantes y una densidad poblacional de 0,73 personas por km².

Geografía
El municipio de Hendricks se encuentra ubicado en las coordenadas . Según la Oficina del Censo de los Estados Unidos, el municipio tiene una superficie total de 210.06 km², de la cual 204,52 km² corresponden a tierra firme y (2,63 %) 5,53 km² es agua.

Demografía
Según el censo de 2010, había 153 personas residiendo en el municipio de Hendricks. La densidad de población era de 0,73 hab./km². De los 153 habitantes, el municipio de Hendricks estaba compuesto por el 75,16 % blancos, el 15,69 % eran amerindios, el 0,65 % eran de otras razas y el 8,5 % eran de una mezcla de razas. Del total de la población el 1,31 % eran hispanos o latinos de cualquier raza.

Referencias

Enlaces externos

Municipios de Míchigan
Localidades del condado de Mackinac

redpajama_set_name: RedPajamaWikipedia


We get a number of calls from customers experiencing problems with their dome CCTV cameras at night once the IR light has come into effect.
The Bosch Smart Eyes camera enables you to combine property surveillance with atmospheric exterior lighting – a brilliant example of increased safety.
Clocks in the UK will fall back by one hour at 1am on the last Sunday in October, as the UK enters a period called Winter Time.
The time of year is fast approaching, the evenings are getting shorter, the blankets are coming out and the heating is finally being switched on.
The customer for this residential CCTV Installation in Abridge got in touch with us after speaking with three other CCTV companies in the area.
Dale is Sara's brother, therefore when Ahmet asked the question - Dale was naturally the one to fill the space for the family based business mascot!
We are always looking for new ways to improve our industry, our business and the service we provide you. We have decided to discontinue our Analogue HD / TVI offering.


text:
Study reveals Muslims 'attached' to Europe despite discrimination
A large majority of Muslims in Europe feel closely connected to the country they live in and trust public institutions despite facing "widespread discrimination", a study suggested on Thursday. The findings come ahead of elections in Germany on Sunday and in Austria next month when right-wing parties critical of Muslim immigration are expected to perform well.
Seventy-six percent of 10,527 first and second-generation Muslims in 15 European Union member states feel "strongly attached" to their country of residence, according to the survey by the Vienna-based EU Agency for Fundamental Rights (FRA). Nonetheless, nearly 40 percent also reported suffering discrimination and harassment because of their ethnic or immigration background, particularly in the Netherlands and France.
Both countries have large Muslim communities and far-right parties sharply critical of Islam came second in elections this year.
"Our survey results make a mockery of the claim that Muslims aren't integrated into our societies," says FRA Director Michael O'Flaherty. "On the contrary, we see a trust in democratic institutions that is higher than much of the general population."
O'Flaherty warned that key obstacles to Muslims' social inclusion were the large-scale discrimination and "hate" crimes they experienced on a regular basis.
A third of Muslim job-seekers said they had encountered bias during their hunt for work over the past five years, the survey found. Many also described having trouble gaining access to housing or education because of their Arabic-sounding name or their headscarf, for instance.
The study singled out its host country Austria, where the far-right may enter government following elections on 15 October, as one of the EU's least Muslim-friendly countries.
Austria's anti-immigration Freedom Party (FPOe) has long railed against Muslims but the two main centrist parties have also taken a harder line in campaigning ahead of the vote.
"Austrians' strongly negative attitudes toward Muslims are being influenced by the public discourse," FRA spokeswoman Katya Andrusz said.
Meanwhile, the survey also showed that most Muslims were "generally open" towards people from different religious or cultural backgrounds. Close to half said the would feel "totally comfortable" with a family member marrying a non-Muslim. But 23 percent told FRA they would not be comfortable with having gay or bisexual neighbours. (AFP)
Related articles on Qantara.de
Clear progress for integration of Muslims in Western Europe
What it means to be German: Recognise the potential
Germany and Islam: "Muslims are already German"
German-Turkish relations: Part of us


THE PERFECT STARTER HOME FOR ANYONE. LOCATED IN THE HEART OF AN UP AND COMING NEIGHBORHOOD. THIS HOME PUTS YOU 45 MINUTES FROM MANHATTAN AND 30 MINUTES TO BROOKLYN. OVER 2 BILLION IS BEING INVESTED IN THE NORTH SHORE. GET THIS BEFORE PRICES SKY ROCKET.


text:
Q: HTTP Server on Android via node.js errors upon request I'm running node.js v0.11 on Android (via https://github.com/paddybyers/node). I attempted to try out the "Hello HTTP" example found here: http://howtonode.org/hello-node, however, I ran into problems.
The server starts fine, but as soon as I attempt to connect to the http server (by visiting http://localhost:8000/), I get this error:
net.js:1156
  COUNTER_NET_SERVER_CONNECTION(socket);
  ^
ReferenceError: COUNTER_NET_SERVER_CONNECTION is not defined
    at TCP.onconnection (net.js:1156:3)

My code is exactly the same as the Hello HTTP example:
//Load the http module to create an http server.
var http = require('http');

// Configure our HTTP server to respond with Hello World to all requests.
var server = http.createServer(function (request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.end("Hello World\n");
});

// Listen on port 8000, IP defaults to 127.0.0.1
server.listen(8000);

// Put a friendly message on the terminal
console.log("Server running at http://127.0.0.1:8000/");

How can I fix this?
Thanks!

A: Compile Node.js with the HAVE_PERFCTR option. (You Need to implement your own perfctrs for Android. See node_counters.cc line 130).
It should be also possible to define the missing functions in your script as empty functions.
PS.:
You also need DTRACE.

A: I simply commented out all COUNTER_NET_, COUNTER_HTTP_, DTRACE_NET_, and DTRACE_HTTP_ calls in the javascript files under lib/.  This amounted to about 10 or so lines that I commented out of net.js and http.js.
I think that js2c.py is supposed to process src/macros.py and src/perfctr_macros.py to effectively do this 'commenting out' for you when it serializes the scripts under lib/ to C arrays in out/release/src/node_natives.h, but that doesn't seem to be happening.

redpajama_set_name: RedPajamaStackExchange


text:
'Evil' barrister will no longer serve life behind bars
Stab plot lawyer's life sentence overturned on appeal
By Tom Seaward @t_seaward Crime & Court Reporter
Royal Courts of Justice and, inset, Anisah Ahmed Pictures: PA/TVP
Top judges have overturned the life sentence handed down to an 'evil' barrister who pursued a Fatal Attraction-style campaign to get back at a former lover.
Shamed lawyer Anisah Ahmed, 34, was given the hefty sentence in April after she admitted making up lies against Iqbal Mohammed – including roping in ex-boyfriend Mustafa Hussain as she invented claims that the married barrister had raped, stabbed and tried to kidnap her.
The victim compared his experience to Hollywood blockbuster Fatal Attraction, in which a jilted lover takes increasingly extreme steps to enact revenge on her married victim.
Sentencing her to life and ordering she serve at least four-and-a-half years behind bars, Judge Michael Gledhill QC described Ahmed's actions as 'malicious, even evil'. He recognised life sentences were a last resort but concluded there was a high risk she would commit serious offences and that risk could not be managed with a stringent restraining order.
It was the first time that a life sentence had been imposed for perverting the course of justice charges.
On Thursday, a panel of three Court of Appeal judges overturned the life sentence – instead imposing a 10 year prison sentence and a lifelong restraining order.
READ MORE: Oxford lawyer given life sentence after falsely claiming she was raped
Lord Justice Edis urged Ahmed, who appeared over video link from HMP Eastwood Park and was so overcome with emotion she rose from her seat and walked out of shot when the judgement was pronounced, to continue her 'good work' in prison and seek help with her mental health upon her release.
"The stakes are very high for you," he said.
"They are not as high as they were because you are no longer subject to a life sentence but they are high.
"If you commit further offences or breach any of those orders you will go to prison for a long time. Whether that happens or not is up to you."
READ MORE: Scorned lawyer's victim compares ordeal to Fatal Attraction
Anisah Ahmed
Balraj Bhatia QC, for Ahmed, earlier told the court that the judge had been wrong to impose a life sentence in April.
He said the judge's notional starting point of 12 years' imprisonment before factoring in her guilty pleas was 'manifestly excessive' and did not take into account her medical conditions.
The barrister complained there was an 'inexplicable' difference between the life sentence given to Ahmed and the suspended sentence handed to stooge Hussain.
In a written judgement, Mr Justice Knowles acknowledged the 'difficult task' faced by Judge Gledhill in the 'unusual case'. But the court concluded that there had not been enough information for him to conclude that Ahmed was a 'serious danger' to the public forever.
Ahmed's attempts to falsify evidence to frame Mr Mohammed were called 'calculated, sophisticated, sustained and repeated'.
"It is quite clear that the Appellant was intent on destroying her victim's life, and she came close to doing so," Mr Justice Knowles said.
But he added that, although the offending justified a 'long sentence', she had not committed a serious violent or sexual offence that – according to a landmark 1997 appeal case – might attract a life sentence.
For news updates straight to your inbox, sign up to our newsletter here.
Have you got a story for us? Contact our newsdesk on news@nqo.com or 01865 425 445.


text:
The sexual and reproductive health of young people in Latin America: Evidence from WHO case studies.
Kostrzewa K
Salud Publica de Mexico. 2008 Jan-Feb; 50(1):10-16.
This original article addresses the sexual and reproductive health needs of young people aged 15 to 24 in Latin America. It introduces five articles from original research projects in three countries: Argentina, Brazil, and Peru. These projects were funded by the World Health Organization. This article explains the importance of studies that address the sexual and reproductive health of young people in developing countries. It provides an overview of sexual and reproductive health issues in Latin America and a discussion these issues in the three study countries. The five articles deal with difficult and challenging issues, including: knowledge of STIs and HIV/ AIDS; pregnancy related practices; quality of care; the role of young men in couple formation, pregnancy and adoption of contraceptive practice; and, the role of obstetricians and gynecologists in public policy debate about family planning and abortion. The four articles in this special section help to improve our understanding of the factors that contribute to risky sexual behavior and negative reproductive health outcomes among youth in Latin America. The findings are useful to help inform and improve health care interventions in various contexts. (author's)
The HIV / AIDS epidemic in Mozambique. HIV / AIDS policy fact sheet.
Kates J; Leggoe AW
Menlo Park, California, Henry J. Kaiser Family Foundation, 2005 Oct. [2] p. (HIV / AIDS Policy Fact Sheet)
Mozambique has over one million people estimated to be living with HIV/AIDS (1.3 million as of the end of 2003). Although Mozambique's prevalence rate (the percent of people living with the disease) is lower than some of the hardest hit countries in the region, it is higher than the sub-Saharan African region overall and recent estimates suggest that the prevalence rate may be on the rise. The epidemic poses significant development challenges to this low-income country. The Government of Mozambique formed a National AIDS Council (NAC) in 2000, and is currently operating its National Strategic Plan to Combat HIV/AIDS for 2005-2009. (excerpt)
The HIV / AIDS epidemic in Zimbabwe. HIV / AIDS policy fact sheet.
Zimbabwe has almost two million people estimated to be living with HIV/AIDS (1.8 million as of the end of 2003), representing the third largest HIV/AIDS burden in sub-Saharan Africa. The HIV/AIDS prevalence rate (the percent of people living with the disease) in Zimbabwe is among the highest in the world, although recent evidence suggests that prevalence may be starting to decline. The epidemic continues to pose significant development challenges to this low-income country, which faces additional complications including drought conditions, substantial internal migration and displacement, and other factors that exacerbate the epidemic's impact. The Government of Zimbabwe established a National AIDS Coordination Programme (NACP) in 1987. In 2000, the Government formed the National AIDS Council (NAC), and is currently developing its National AIDS Strategic Framework for 2005-2009. (excerpt)
The HIV / AIDS epidemic in Zambia. HIV / AIDS policy fact sheet.
Zambia has almost one million people estimated to be living with HIV/AIDS (920,000 as of the end of 2003). Zambia's HIV prevalence rate (the percent of people living with the disease) is twice the rate in sub-Saharan Africa overall and the epidemic continues to pose one of the most significant development challenges to this low-income country. The Government of Zambia established a National AIDS Prevention and Control Programme in 1986. In 2000, the Government formed a National AIDS Council (NAC) and is currently implementing its National HIV/AIDS/STI/TB Implementation Plan for 2002-2005. (excerpt)
The HIV / AIDS epidemic in Uganda. HIV / AIDS policy fact sheet.
Uganda has more than a half million people estimated to be living with HIV/AIDS (530,000 as of the end of 2003). The country of Uganda is widely considered to be an HIV/AIDS success story, having reduced its HIV prevalence rate (the percent of people living with the disease) significantly over time, from one of the most severe epidemics in the 1980s, with a peak in the early-1990s, to a rate lower than that of the sub-Saharan African region overall. However, the epidemic has already had a significant impact in Uganda, and continues to pose development challenges to this low-income country. The Government of Uganda established a National AIDS Control Program (NACP) in 1986, the first HIV/AIDS control program in the region. In 1992, the Government formed the Uganda AIDS Commission (UAC), and is currently operating its National Strategic Framework for 2000/2001-2005/2006. (excerpt)
The HIV / AIDS epidemic in the United Republic of Tanzania. HIV / AIDS policy fact sheet.
The United Republic of Tanzania (mainland Tanzania and the island of Zanzibar), the largest country in East Africa, had an estimated 1.6 million people living with HIV/AIDS as of the end of 2003. Although Tanzania's prevalence rate (the percent of people living with the disease) is lower than some of the hardest hit countries in the sub-Saharan African region, it is higher than the prevalence rate of the region overall (8.8% compared to 7.5%). The epidemic poses significant development challenges to this low-income country. In 1985, the National AIDS Control Programme was established to respond to the epidemic. The Tanzania Commission for AIDS (TACAIDS) and the Zanzibar AIDS Commission (ZAC) were created in 2001 and 2002, respectively. Tanzania is currently operating its National Multi-Sectoral Strategic Framework on HIV/AIDS for 2003-2007. (excerpt)
The HIV / AIDS epidemic in Swaziland. HIV / AIDS policy fact sheet.
Swaziland has the highest HIV/AIDS prevalence rate (the percent of people living with the disease) in the world, a much higher rate than the sub-Saharan African region overall (38.8% compared to 7.5%). Moreover, a recent survey suggests that HIV prevalence rates in Swaziland continue to increase. As of the end of 2003, there were an estimated 220,000 people living with HIV/AIDS in Swaziland, or almost 4 in 10 adults. The epidemic has already had a profound effect in Swaziland, posing significant development challenges to this middle-income country. The Government of Swaziland created the Swaziland National AIDS Programme in 1987 to respond to the epidemic and declared HIV/AIDS a national disaster in 1999. In 2001, the National Emergency Response Council on HIV and AIDS (NERCHA) was established, and the National AIDS Strategic Plan for HIV/AIDS 2006 - 2008 is currently under development. (excerpt)
The HIV / AIDS epidemic in South Africa. HIV / AIDS policy fact sheet.
South Africa has the highest number of people estimated to be living with HIV/AIDS in the world (5.3 million as of the end of 2003) and is one of the countries hardest hit by the epidemic. South Africa's HIV/AIDS prevalence rate (the percent of people living with the disease) is much higher than that of the sub-Saharan African region overall, and although prevalence rates have begun to stabilize, the South African Government's most recent surveillance study indicates that prevalence may still be on the rise. The epidemic has already had a profound impact on many aspects of South African society and is projected to affect the country's economic, education, and health sectors if more is not done to stem its tide. As a middle-income country of significant political and economic importance in the African continent, the future course of South Africa's HIV/AIDS epidemic will have broader implications for Africa overall. The Government of South Africa established the National AIDS Coordinating Committee of South Africa (NACOSA) in 1992 and created the South African National AIDS Council (SANAC) in 2000. The country's HIV/AIDS/STD Strategic Plan for South Africa: 2000-2005 is currently being implemented. (author's)
The HIV / AIDS epidemic in Seychelles. HIV / AIDS policy fact sheet.
The HIV/AIDS prevalence rate (the percent of people living with HIV/AIDS) in Seychelles remains fairly low, and significantly lower than other countries in sub-Saharan Africa. Estimated HIV/AIDS prevalence in Seychelles was 0.2% as of the end of 2002, or less than 200 people. However, the prevalence rate has increased over time, and data indicate that HIV/AIDS may be more widespread in this middle-income country than previously thought. The Seychelles Government began its response to the epidemic shortly after the first case of HIV was diagnosed in 1987, with an initial short-term plan; the following year, an AIDS-IEC Committee was formed within the Ministry of Health. The National AIDS Council (NAC) was launched in 2002. The Government also created a National AIDS Trust Fund in 2002 to help mobilize resources and coordinate prevention and care efforts. (excerpt)
The HIV / AIDS epidemic in Nigeria. HIV / AIDS policy fact sheet.
Nigeria has the third highest number of people estimated to be living with HIV/AIDS in the world (3.6 million as of the end of 2003), after South Africa and India. Although Nigeria's HIV/AIDS prevalence rate (the percent of people living with the disease) is still relatively low compared to some countries in sub-Saharan Africa, Nigeria is considered to be a "next wave" country; that is, it stands at a critical point in its epidemic where increased prevention and treatment efforts today could help stem the tide of a much more significant epidemic in the future. As the most populous country in Africa and one of the most populous nations in the world, even a small increase in the HIV/AIDS prevalence rate in this low-income country would represent a significant share of the global HIV/AIDS burden. The Government of Nigeria established the National AIDS Action Committee (NACA) in 2000 and has a National HIV/AIDS Strategic Plan for the 2005-2009 period. (excerpt)
The HIV / AIDS epidemic in Namibia. HIV / AIDS policy fact sheet.
Namibia has one of the highest HIV/AIDS prevalence rates (the percent of people living with the disease) in the world, a much higher rate than the sub-Saharan African region overall (21.3% compared to 7.5%). As of the end of 2003, there were 210,000 people estimated to be living with HIV/AIDS in Namibia, or more than one in five adults. Although recent evidence suggests that prevalence may be starting to decline, the epidemic already poses significant challenges to this middle-income country, and high levels of unemployment and income disparity may further the spread of diseases such as HIV/AIDS. The Government of Namibia established a National AIDS Committee (NAC) in 1990 and is currently implementing the third National Strategic Plan on HIV/AIDS (2004-2009). (excerpt)
The HIV / AIDS epidemic in Mauritius. HIV / AIDS policy fact sheet.
The HIV/AIDS epidemic in Mauritius remains fairly concentrated. With fewer than one thousand people estimated to be living with HIV/AIDS (700 as of the end of 2001), Mauritius' HIV/AIDS prevalence rate (the percent of people living with the disease) is significantly lower than many of its neighboring countries and among the lowest in the sub-Saharan African region overall. However, there are signs of an increasing trend in HIV/AIDS cases in recent years in this middle-income country. In 1987, the Mauritius Ministry of Health and Quality of Life implemented a National AIDS Control and Prevention Programme. The Government of Mauritius also formed a National Coordinating Committee on HIV/AIDS and is currently operating under its National Strategic Plan for HIV/AIDS 2001-2005. (excerpt)
The HIV / AIDS epidemic in Malawi. HIV / AIDS policy fact sheet.
Malawi has almost one million people estimated to be living with HIV/AIDS (900,000 as of the end of 2003). Malawi's HIV/AIDS prevalence rate (the percent of people living with the disease) is almost twice the rate in sub-Saharan Africa overall (14.2% compared to 7.5% in 2003). The HIV/AIDS epidemic poses significant development challenges to this low-income country, which has been exacerbated by high levels of food insecurity. In 2001, the Government of Malawi formed a National AIDS Commission (NAC), which has been led by the Minister of State Responsible for HIV/AIDS Programmes since 2003. The Government developed a National HIV/AIDS Strategic Framework (2000-2004) to coordinate the country's response to the HIV/AIDS epidemic, and a new framework is being developed. (excerpt)
The HIV / AIDS epidemic in Madagascar. HIV / AIDS policy fact sheet.
As of the end of 2003, there were an estimated 140,000 people living with HIV/AIDS in Madagascar, up from 100,000 in 2001.1 Recent studies suggest that the HIV/AIDS prevalence rate in Madagascar has begun to increase. Although Madagascar's HIV/AIDS prevalence rate (the percent of people living with the disease) is still relatively low (1.7%) compared to the sub-Saharan African region overall and to its neighboring countries, there is concern that high levels of sexually transmitted infections (STI's) such as syphilis, could fuel the HIV/AIDS epidemic in this low-income country, as could other factors such as poverty and limited access to health and social services. The Government of Madagascar formed a National AIDS Committee in 2002 and is currently operating a National Strategic Framework on HIV/AIDS. (excerpt)
The HIV / AIDS epidemic in Lesotho. HIV / AIDS policy fact sheet.
Lesotho has one of the highest HIV/AIDS prevalence rates (the percent of people living with the disease) in the world, a much higher rate than the sub-Saharan African region overall (28.9% compared to 7.5%). As of the end of 2003, there were an estimated 320,000 people living with HIV/AIDS in Lesotho, or almost 3 in 10 adults. The epidemic has already had a profound effect in Lesotho, posing significant development challenges to this very low-income country. The Government of Lesotho formed the Lesotho AIDS Programme Coordinating Authority (LAPCA) in 2001, and is currently developing a National AIDS Strategic Plan for 2005-2008. The Government has also established a National AIDS Commission (NAC) to coordinate the country's response to the epidemic. (excerpt)
The HIV / AIDS epidemic in Kenya. HIV / AIDS policy fact sheet.
Kenya has more than one million people estimated to be living with HIV/AIDS (1.2 million as of the end of 2003). Kenya's HIV/AIDS prevalence rate (the percent of people living with the disease) is just below that of the sub-Saharan African region overall (6.7% compared to 7.5%). Recent data indicate that the country's HIV prevalence rate may be on the decline in some areas. However, the HIV/AIDS epidemic poses significant challenges to this low-income country. The Government of Kenya first established a National AIDS Control Council (NACC) in 1999, and has a National Strategic Framework for HIV/AIDS for 2005-2010. (excerpt)
The HIV / AIDS epidemic in Ghana. HIV / AIDS policy fact sheet.
There were an estimated 350,000 people living with HIV/AIDS in Ghana as of the end of 2003. The HIV/AIDS prevalence rate (the percent of people living with the disease) in Ghana is still relatively low compared to the sub-Saharan African region overall, and appears to be fairly stable, but there are an increasing number of people living with HIV/AIDS in this low-income country, posing challenges to both prevention and treatment efforts. The Government of Ghana created a National Advisory Commission on AIDS (NACA) in 1985 and established a National AIDS Control Programme (NACP) in 1987. The Ghana AIDS Commission was inaugurated in 2000, followed by the implementation of the country's National Strategic Framework (NSF) on HIV/AIDS for 2001-2005. (excerpt)
The HIV / AIDS epidemic in the Democratic Republic of the Congo. HIV / AIDS policy fact sheet.
The Democratic Republic of the Congo (DRC) has more than one million people estimated to be living with HIV/AIDS (1.1 million as of the end of 2003). Although the DRC's HIV/AIDS prevalence rate (the percent of people living with the disease), is still relatively low (4.2%) compared to the sub-Saharan African region overall and to some of the region's hardest hit countries, this low-income country is in a post-conflict period and faces numerous challenges including HIV/AIDS. The Government of the DRC established a National AIDS Control Programme in 1987 and has a National HIV/AIDS Strategic Plan for 1999-2008. (excerpt)
The HIV / AIDS epidemic in Botswana. HIV / AIDS policy fact sheet.
Botswana has the second highest HIV/AIDS prevalence rate (the percent of people living with the disease) in the world (37.3%), a much higher rate than the sub-Saharan African region overall. As of the end of 2003, there were an estimated 350,000 people living with HIV/AIDS in Botswana, or more than a third of the country's adult population. The epidemic has already had a profound effect in Botswana, posing significant development challenges to this middle-income country. The Government of Botswana created a National AIDS Coordinating Agency (NACA) in 1999, and is currently operating its National Strategic Plan on HIV/AIDS for 2003-2009. (excerpt)
At the crossroads: accelerating youth access to HIV / AIDS interventions.
Joint United Nations Programme on HIV / AIDS [UNAIDS]. Inter-Agency Task Team on Young People
New York, New York, United Nations Population Fund [UNFPA], HIV / AIDS Branch, UNAIDS Inter-Agency Task Team on Young People, 2004. 8 p.
Young people remain at the centre of the epidemic in terms of transmission, vulnerability, impact, and potential for change. Today's young generation, the largest in history, has not known a world without AIDS. Of the over 1 billion young people worldwide, 10 million are currently living with HIV. If we are to reach the global targets set forth in international agreements, urgent action and increased investment must be made in HIV prevention, treatment and care programmes specifically for young people. (excerpt)
- Remove HIV filter HIV
- Remove Youth filter Youth
20 AIDS Apply AIDS filter
19 Knowledge Apply Knowledge filter
19 Prevalence Apply Prevalence filter
18 Antiretroviral Therapy Apply Antiretroviral Therapy filter
18 Financial Activities Apply Financial Activities filter
18 Foreign Aid Apply Foreign Aid filter
18 Government Programs Apply Government Programs filter
18 Information Sources Apply Information Sources filter
18 International Agencies Apply International Agencies filter
18 Persons Living With HIV/AIDS Apply Persons Living With HIV/AIDS filter
18 Summary Report Apply Summary Report filter
2 Risk Factors Apply Risk Factors filter
1 Adolescent Health Apply Adolescent Health filter
1 Attitudes Apply Attitudes filter
1 Case Studies Apply Case Studies filter
1 Contraceptive Availability Apply Contraceptive Availability filter
1 Evaluation Apply Evaluation filter
1 HIV Infections Apply HIV Infections filter
1 HIV Prevention Apply HIV Prevention filter
1 HIV Testing Apply HIV Testing filter
1 Literature Review Apply Literature Review filter
1 Program Accessibility Apply Program Accessibility filter
1 Public Health Apply Public Health filter
1 Quality of Health Care Apply Quality of Health Care filter
1 Reproductive Health Apply Reproductive Health filter
1 Research Report Apply Research Report filter
1 Risk Behavior Apply Risk Behavior filter
1 Sexually Transmitted Diseases Apply Sexually Transmitted Diseases filter
1 UNAIDS Apply UNAIDS filter
18 Africa Apply Africa filter
1 Americas Apply Americas filter
1 Global Apply Global filter
18 2005 Apply 2005 filter
20 English Apply English filter


NOTE: The NC522m supports linking at 1000Mbps or 10000Mbps when not connected to a Flex-10 enabled module and will link with all current 1Gb switches at 1Gb.
NOTE: HP ProLiant BL685c G6 processor option kits contain two (2) processors.
NOTE: The ProLiant BL685c G6 only supports two (2) and four (4) processor configurations.
NOTE: The Smart Array battery option kit is required to enable battery-backed write cache (BBWC).


text:
Q: Is there a way to make dialog boxes in Linux? In Windows, you could simply make a .vbs script (Virtual Basic Script) by doing x=msgbox(). But is there a scripting language for Linux?

A: There is a text/curses program called dialog, which you can call from bash, which is a fine scripting language.
http://manpages.ubuntu.com/manpages/natty/man1/dialog.1.html
And you can try some examples,
    $ pushd /usr/share/doc/dialog/examples
    $ ./calendar


text:
package sarama

import (
	"errors"
	"fmt"
	"math"
	"sync"
	"sync/atomic"
	"time"

	"github.com/rcrowley/go-metrics"
)

// ConsumerMessage encapsulates a Kafka message returned by the consumer.
type ConsumerMessage struct {
	Headers        []*RecordHeader // only set if kafka is version 0.11+
	Timestamp      time.Time       // only set if kafka is version 0.10+, inner message timestamp
	BlockTimestamp time.Time       // only set if kafka is version 0.10+, outer (compressed) block timestamp

	Key, Value []byte
	Topic      string
	Partition  int32
	Offset     int64
}

// ConsumerError is what is provided to the user when an error occurs.
// It wraps an error and includes the topic and partition.
type ConsumerError struct {
	Topic     string
	Partition int32
	Err       error
}

func (ce ConsumerError) Error() string {
	return fmt.Sprintf("kafka: error while consuming %s/%d: %s", ce.Topic, ce.Partition, ce.Err)
}

func (ce ConsumerError) Unwrap() error {
	return ce.Err
}

// ConsumerErrors is a type that wraps a batch of errors and implements the Error interface.
// It can be returned from the PartitionConsumer's Close methods to avoid the need to manually drain errors
// when stopping.
type ConsumerErrors []*ConsumerError

func (ce ConsumerErrors) Error() string {
	return fmt.Sprintf("kafka: %d errors while consuming", len(ce))
}

// Consumer manages PartitionConsumers which process Kafka messages from brokers. You MUST call Close()
// on a consumer to avoid leaks, it will not be garbage-collected automatically when it passes out of
// scope.
type Consumer interface {
	// Topics returns the set of available topics as retrieved from the cluster
	// metadata. This method is the same as Client.Topics(), and is provided for
	// convenience.
	Topics() ([]string, error)

	// Partitions returns the sorted list of all partition IDs for the given topic.
	// This method is the same as Client.Partitions(), and is provided for convenience.
	Partitions(topic string) ([]int32, error)

	// ConsumePartition creates a PartitionConsumer on the given topic/partition with
	// the given offset. It will return an error if this Consumer is already consuming
	// on the given topic/partition. Offset can be a literal offset, or OffsetNewest
	// or OffsetOldest
	ConsumePartition(topic string, partition int32, offset int64) (PartitionConsumer, error)

	// HighWaterMarks returns the current high water marks for each topic and partition.
	// Consistency between partitions is not guaranteed since high water marks are updated separately.
	HighWaterMarks() map[string]map[int32]int64

	// Close shuts down the consumer. It must be called after all child
	// PartitionConsumers have already been closed.
	Close() error
}

type consumer struct {
	conf            *Config
	children        map[string]map[int32]*partitionConsumer
	brokerConsumers map[*Broker]*brokerConsumer
	client          Client
	lock            sync.Mutex
}

// NewConsumer creates a new consumer using the given broker addresses and configuration.
func NewConsumer(addrs []string, config *Config) (Consumer, error) {
	client, err := NewClient(addrs, config)
	if err != nil {
		return nil, err
	}
	return newConsumer(client)
}

// NewConsumerFromClient creates a new consumer using the given client. It is still
// necessary to call Close() on the underlying client when shutting down this consumer.
func NewConsumerFromClient(client Client) (Consumer, error) {
	// For clients passed in by the client, ensure we don't
	// call Close() on it.
	cli := &nopCloserClient{client}
	return newConsumer(cli)
}

func newConsumer(client Client) (Consumer, error) {
	// Check that we are not dealing with a closed Client before processing any other arguments
	if client.Closed() {
		return nil, ErrClosedClient
	}

	c := &consumer{
		client:          client,
		conf:            client.Config(),
		children:        make(map[string]map[int32]*partitionConsumer),
		brokerConsumers: make(map[*Broker]*brokerConsumer),
	}

	return c, nil
}

func (c *consumer) Close() error {
	return c.client.Close()
}

func (c *consumer) Topics() ([]string, error) {
	return c.client.Topics()
}

func (c *consumer) Partitions(topic string) ([]int32, error) {
	return c.client.Partitions(topic)
}

func (c *consumer) ConsumePartition(topic string, partition int32, offset int64) (PartitionConsumer, error) {
	child := &partitionConsumer{
		consumer:  c,
		conf:      c.conf,
		topic:     topic,
		partition: partition,
		messages:  make(chan *ConsumerMessage, c.conf.ChannelBufferSize),
		errors:    make(chan *ConsumerError, c.conf.ChannelBufferSize),
		feeder:    make(chan *FetchResponse, 1),
		trigger:   make(chan none, 1),
		dying:     make(chan none),
		fetchSize: c.conf.Consumer.Fetch.Default,
	}

	if err := child.chooseStartingOffset(offset); err != nil {
		return nil, err
	}

	var leader *Broker
	var err error
	if leader, err = c.client.Leader(child.topic, child.partition); err != nil {
		return nil, err
	}

	if err := c.addChild(child); err != nil {
		return nil, err
	}

	go withRecover(child.dispatcher)
	go withRecover(child.responseFeeder)

	child.broker = c.refBrokerConsumer(leader)
	child.broker.input <- child

	return child, nil
}

func (c *consumer) HighWaterMarks() map[string]map[int32]int64 {
	c.lock.Lock()
	defer c.lock.Unlock()

	hwms := make(map[string]map[int32]int64)
	for topic, p := range c.children {
		hwm := make(map[int32]int64, len(p))
		for partition, pc := range p {
			hwm[partition] = pc.HighWaterMarkOffset()
		}
		hwms[topic] = hwm
	}

	return hwms
}

func (c *consumer) addChild(child *partitionConsumer) error {
	c.lock.Lock()
	defer c.lock.Unlock()

	topicChildren := c.children[child.topic]
	if topicChildren == nil {
		topicChildren = make(map[int32]*partitionConsumer)
		c.children[child.topic] = topicChildren
	}

	if topicChildren[child.partition] != nil {
		return ConfigurationError("That topic/partition is already being consumed")
	}

	topicChildren[child.partition] = child
	return nil
}

func (c *consumer) removeChild(child *partitionConsumer) {
	c.lock.Lock()
	defer c.lock.Unlock()

	delete(c.children[child.topic], child.partition)
}

func (c *consumer) refBrokerConsumer(broker *Broker) *brokerConsumer {
	c.lock.Lock()
	defer c.lock.Unlock()

	bc := c.brokerConsumers[broker]
	if bc == nil {
		bc = c.newBrokerConsumer(broker)
		c.brokerConsumers[broker] = bc
	}

	bc.refs++

	return bc
}

func (c *consumer) unrefBrokerConsumer(brokerWorker *brokerConsumer) {
	c.lock.Lock()
	defer c.lock.Unlock()

	brokerWorker.refs--

	if brokerWorker.refs == 0 {
		close(brokerWorker.input)
		if c.brokerConsumers[brokerWorker.broker] == brokerWorker {
			delete(c.brokerConsumers, brokerWorker.broker)
		}
	}
}

func (c *consumer) abandonBrokerConsumer(brokerWorker *brokerConsumer) {
	c.lock.Lock()
	defer c.lock.Unlock()

	delete(c.brokerConsumers, brokerWorker.broker)
}

// PartitionConsumer

// PartitionConsumer processes Kafka messages from a given topic and partition. You MUST call one of Close() or
// AsyncClose() on a PartitionConsumer to avoid leaks; it will not be garbage-collected automatically when it passes out
// of scope.
//
// The simplest way of using a PartitionConsumer is to loop over its Messages channel using a for/range
// loop. The PartitionConsumer will only stop itself in one case: when the offset being consumed is reported
// as out of range by the brokers. In this case you should decide what you want to do (try a different offset,
// notify a human, etc) and handle it appropriately. For all other error cases, it will just keep retrying.
// By default, it logs these errors to sarama.Logger; if you want to be notified directly of all errors, set
// your config's Consumer.Return.Errors to true and read from the Errors channel, using a select statement
// or a separate goroutine. Check out the Consumer examples to see implementations of these different approaches.
//
// To terminate such a for/range loop while the loop is executing, call AsyncClose. This will kick off the process of
// consumer tear-down & return immediately. Continue to loop, servicing the Messages channel until the teardown process
// AsyncClose initiated closes it (thus terminating the for/range loop). If you've already ceased reading Messages, call
// Close; this will signal the PartitionConsumer's goroutines to begin shutting down (just like AsyncClose), but will
// also drain the Messages channel, harvest all errors & return them once cleanup has completed.
type PartitionConsumer interface {
	// AsyncClose initiates a shutdown of the PartitionConsumer. This method will return immediately, after which you
	// should continue to service the 'Messages' and 'Errors' channels until they are empty. It is required to call this
	// function, or Close before a consumer object passes out of scope, as it will otherwise leak memory. You must call
	// this before calling Close on the underlying client.
	AsyncClose()

	// Close stops the PartitionConsumer from fetching messages. It will initiate a shutdown just like AsyncClose, drain
	// the Messages channel, harvest any errors & return them to the caller. Note that if you are continuing to service
	// the Messages channel when this function is called, you will be competing with Close for messages; consider
	// calling AsyncClose, instead. It is required to call this function (or AsyncClose) before a consumer object passes
	// out of scope, as it will otherwise leak memory. You must call this before calling Close on the underlying client.
	Close() error

	// Messages returns the read channel for the messages that are returned by
	// the broker.
	Messages() <-chan *ConsumerMessage

	// Errors returns a read channel of errors that occurred during consuming, if
	// enabled. By default, errors are logged and not returned over this channel.
	// If you want to implement any custom error handling, set your config's
	// Consumer.Return.Errors setting to true, and read from this channel.
	Errors() <-chan *ConsumerError

	// HighWaterMarkOffset returns the high water mark offset of the partition,
	// i.e. the offset that will be used for the next message that will be produced.
	// You can use this to determine how far behind the processing is.
	HighWaterMarkOffset() int64
}

type partitionConsumer struct {
	highWaterMarkOffset int64 // must be at the top of the struct because https://golang.org/pkg/sync/atomic/#pkg-note-BUG

	consumer *consumer
	conf     *Config
	broker   *brokerConsumer
	messages chan *ConsumerMessage
	errors   chan *ConsumerError
	feeder   chan *FetchResponse

	preferredReadReplica int32

	trigger, dying chan none
	closeOnce      sync.Once
	topic          string
	partition      int32
	responseResult error
	fetchSize      int32
	offset         int64
	retries        int32
}

var errTimedOut = errors.New("timed out feeding messages to the user") // not user-facing

func (child *partitionConsumer) sendError(err error) {
	cErr := &ConsumerError{
		Topic:     child.topic,
		Partition: child.partition,
		Err:       err,
	}

	if child.conf.Consumer.Return.Errors {
		child.errors <- cErr
	} else {
		Logger.Println(cErr)
	}
}

func (child *partitionConsumer) computeBackoff() time.Duration {
	if child.conf.Consumer.Retry.BackoffFunc != nil {
		retries := atomic.AddInt32(&child.retries, 1)
		return child.conf.Consumer.Retry.BackoffFunc(int(retries))
	}
	return child.conf.Consumer.Retry.Backoff
}

func (child *partitionConsumer) dispatcher() {
	for range child.trigger {
		select {
		case <-child.dying:
			close(child.trigger)
		case <-time.After(child.computeBackoff()):
			if child.broker != nil {
				child.consumer.unrefBrokerConsumer(child.broker)
				child.broker = nil
			}

			Logger.Printf("consumer/%s/%d finding new broker\n", child.topic, child.partition)
			if err := child.dispatch(); err != nil {
				child.sendError(err)
				child.trigger <- none{}
			}
		}
	}

	if child.broker != nil {
		child.consumer.unrefBrokerConsumer(child.broker)
	}
	child.consumer.removeChild(child)
	close(child.feeder)
}

func (child *partitionConsumer) preferredBroker() (*Broker, error) {
	if child.preferredReadReplica >= 0 {
		broker, err := child.consumer.client.Broker(child.preferredReadReplica)
		if err == nil {
			return broker, nil
		}
	}

	// if prefered replica cannot be found fallback to leader
	return child.consumer.client.Leader(child.topic, child.partition)
}

func (child *partitionConsumer) dispatch() error {
	if err := child.consumer.client.RefreshMetadata(child.topic); err != nil {
		return err
	}

	broker, err := child.preferredBroker()
	if err != nil {
		return err
	}

	child.broker = child.consumer.refBrokerConsumer(broker)

	child.broker.input <- child

	return nil
}

func (child *partitionConsumer) chooseStartingOffset(offset int64) error {
	newestOffset, err := child.consumer.client.GetOffset(child.topic, child.partition, OffsetNewest)
	if err != nil {
		return err
	}
	oldestOffset, err := child.consumer.client.GetOffset(child.topic, child.partition, OffsetOldest)
	if err != nil {
		return err
	}

	switch {
	case offset == OffsetNewest:
		child.offset = newestOffset
	case offset == OffsetOldest:
		child.offset = oldestOffset
	case offset >= oldestOffset && offset <= newestOffset:
		child.offset = offset
	default:
		return ErrOffsetOutOfRange
	}

	return nil
}

func (child *partitionConsumer) Messages() <-chan *ConsumerMessage {
	return child.messages
}

func (child *partitionConsumer) Errors() <-chan *ConsumerError {
	return child.errors
}

func (child *partitionConsumer) AsyncClose() {
	// this triggers whatever broker owns this child to abandon it and close its trigger channel, which causes
	// the dispatcher to exit its loop, which removes it from the consumer then closes its 'messages' and
	// 'errors' channel (alternatively, if the child is already at the dispatcher for some reason, that will
	// also just close itself)
	child.closeOnce.Do(func() {
		close(child.dying)
	})
}

func (child *partitionConsumer) Close() error {
	child.AsyncClose()

	var consumerErrors ConsumerErrors
	for err := range child.errors {
		consumerErrors = append(consumerErrors, err)
	}

	if len(consumerErrors) > 0 {
		return consumerErrors
	}
	return nil
}

func (child *partitionConsumer) HighWaterMarkOffset() int64 {
	return atomic.LoadInt64(&child.highWaterMarkOffset)
}

func (child *partitionConsumer) responseFeeder() {
	var msgs []*ConsumerMessage
	expiryTicker := time.NewTicker(child.conf.Consumer.MaxProcessingTime)
	firstAttempt := true

feederLoop:
	for response := range child.feeder {
		msgs, child.responseResult = child.parseResponse(response)

		if child.responseResult == nil {
			atomic.StoreInt32(&child.retries, 0)
		}

		for i, msg := range msgs {
			for _, interceptor := range child.conf.Consumer.Interceptors {
				msg.safelyApplyInterceptor(interceptor)
			}
		messageSelect:
			select {
			case <-child.dying:
				child.broker.acks.Done()
				continue feederLoop
			case child.messages <- msg:
				firstAttempt = true
			case <-expiryTicker.C:
				if !firstAttempt {
					child.responseResult = errTimedOut
					child.broker.acks.Done()
				remainingLoop:
					for _, msg = range msgs[i:] {
						select {
						case child.messages <- msg:
						case <-child.dying:
							break remainingLoop
						}
					}
					child.broker.input <- child
					continue feederLoop
				} else {
					// current message has not been sent, return to select
					// statement
					firstAttempt = false
					goto messageSelect
				}
			}
		}

		child.broker.acks.Done()
	}

	expiryTicker.Stop()
	close(child.messages)
	close(child.errors)
}

func (child *partitionConsumer) parseMessages(msgSet *MessageSet) ([]*ConsumerMessage, error) {
	var messages []*ConsumerMessage
	for _, msgBlock := range msgSet.Messages {
		for _, msg := range msgBlock.Messages() {
			offset := msg.Offset
			timestamp := msg.Msg.Timestamp
			if msg.Msg.Version >= 1 {
				baseOffset := msgBlock.Offset - msgBlock.Messages()[len(msgBlock.Messages())-1].Offset
				offset += baseOffset
				if msg.Msg.LogAppendTime {
					timestamp = msgBlock.Msg.Timestamp
				}
			}
			if offset < child.offset {
				continue
			}
			messages = append(messages, &ConsumerMessage{
				Topic:          child.topic,
				Partition:      child.partition,
				Key:            msg.Msg.Key,
				Value:          msg.Msg.Value,
				Offset:         offset,
				Timestamp:      timestamp,
				BlockTimestamp: msgBlock.Msg.Timestamp,
			})
			child.offset = offset + 1
		}
	}
	if len(messages) == 0 {
		child.offset++
	}
	return messages, nil
}

func (child *partitionConsumer) parseRecords(batch *RecordBatch) ([]*ConsumerMessage, error) {
	messages := make([]*ConsumerMessage, 0, len(batch.Records))

	for _, rec := range batch.Records {
		offset := batch.FirstOffset + rec.OffsetDelta
		if offset < child.offset {
			continue
		}
		timestamp := batch.FirstTimestamp.Add(rec.TimestampDelta)
		if batch.LogAppendTime {
			timestamp = batch.MaxTimestamp
		}
		messages = append(messages, &ConsumerMessage{
			Topic:     child.topic,
			Partition: child.partition,
			Key:       rec.Key,
			Value:     rec.Value,
			Offset:    offset,
			Timestamp: timestamp,
			Headers:   rec.Headers,
		})
		child.offset = offset + 1
	}
	if len(messages) == 0 {
		child.offset++
	}
	return messages, nil
}

func (child *partitionConsumer) parseResponse(response *FetchResponse) ([]*ConsumerMessage, error) {
	var (
		metricRegistry          = child.conf.MetricRegistry
		consumerBatchSizeMetric metrics.Histogram
	)

	if metricRegistry != nil {
		consumerBatchSizeMetric = getOrRegisterHistogram("consumer-batch-size", metricRegistry)
	}

	// If request was throttled and empty we log and return without error
	if response.ThrottleTime != time.Duration(0) && len(response.Blocks) == 0 {
		Logger.Printf(
			"consumer/broker/%d FetchResponse throttled %v\n",
			child.broker.broker.ID(), response.ThrottleTime)
		return nil, nil
	}

	block := response.GetBlock(child.topic, child.partition)
	if block == nil {
		return nil, ErrIncompleteResponse
	}

	if block.Err != ErrNoError {
		return nil, block.Err
	}

	nRecs, err := block.numRecords()
	if err != nil {
		return nil, err
	}

	consumerBatchSizeMetric.Update(int64(nRecs))

	child.preferredReadReplica = block.PreferredReadReplica

	if nRecs == 0 {
		partialTrailingMessage, err := block.isPartial()
		if err != nil {
			return nil, err
		}
		// We got no messages. If we got a trailing one then we need to ask for more data.
		// Otherwise we just poll again and wait for one to be produced...
		if partialTrailingMessage {
			if child.conf.Consumer.Fetch.Max > 0 && child.fetchSize == child.conf.Consumer.Fetch.Max {
				// we can't ask for more data, we've hit the configured limit
				child.sendError(ErrMessageTooLarge)
				child.offset++ // skip this one so we can keep processing future messages
			} else {
				child.fetchSize *= 2
				// check int32 overflow
				if child.fetchSize < 0 {
					child.fetchSize = math.MaxInt32
				}
				if child.conf.Consumer.Fetch.Max > 0 && child.fetchSize > child.conf.Consumer.Fetch.Max {
					child.fetchSize = child.conf.Consumer.Fetch.Max
				}
			}
		}

		return nil, nil
	}

	// we got messages, reset our fetch size in case it was increased for a previous request
	child.fetchSize = child.conf.Consumer.Fetch.Default
	atomic.StoreInt64(&child.highWaterMarkOffset, block.HighWaterMarkOffset)

	// abortedProducerIDs contains producerID which message should be ignored as uncommitted
	// - producerID are added when the partitionConsumer iterate over the offset at which an aborted transaction begins (abortedTransaction.FirstOffset)
	// - producerID are removed when partitionConsumer iterate over an aborted controlRecord, meaning the aborted transaction for this producer is over
	abortedProducerIDs := make(map[int64]struct{}, len(block.AbortedTransactions))
	abortedTransactions := block.getAbortedTransactions()

	var messages []*ConsumerMessage
	for _, records := range block.RecordsSet {
		switch records.recordsType {
		case legacyRecords:
			messageSetMessages, err := child.parseMessages(records.MsgSet)
			if err != nil {
				return nil, err
			}

			messages = append(messages, messageSetMessages...)
		case defaultRecords:
			// Consume remaining abortedTransaction up to last offset of current batch
			for _, txn := range abortedTransactions {
				if txn.FirstOffset > records.RecordBatch.LastOffset() {
					break
				}
				abortedProducerIDs[txn.ProducerID] = struct{}{}
				// Pop abortedTransactions so that we never add it again
				abortedTransactions = abortedTransactions[1:]
			}

			recordBatchMessages, err := child.parseRecords(records.RecordBatch)
			if err != nil {
				return nil, err
			}

			// Parse and commit offset but do not expose messages that are:
			// - control records
			// - part of an aborted transaction when set to `ReadCommitted`

			// control record
			isControl, err := records.isControl()
			if err != nil {
				// I don't know why there is this continue in case of error to begin with
				// Safe bet is to ignore control messages if ReadUncommitted
				// and block on them in case of error and ReadCommitted
				if child.conf.Consumer.IsolationLevel == ReadCommitted {
					return nil, err
				}
				continue
			}
			if isControl {
				controlRecord, err := records.getControlRecord()
				if err != nil {
					return nil, err
				}

				if controlRecord.Type == ControlRecordAbort {
					delete(abortedProducerIDs, records.RecordBatch.ProducerID)
				}
				continue
			}

			// filter aborted transactions
			if child.conf.Consumer.IsolationLevel == ReadCommitted {
				_, isAborted := abortedProducerIDs[records.RecordBatch.ProducerID]
				if records.RecordBatch.IsTransactional && isAborted {
					continue
				}
			}

			messages = append(messages, recordBatchMessages...)
		default:
			return nil, fmt.Errorf("unknown records type: %v", records.recordsType)
		}
	}

	return messages, nil
}

type brokerConsumer struct {
	consumer         *consumer
	broker           *Broker
	input            chan *partitionConsumer
	newSubscriptions chan []*partitionConsumer
	subscriptions    map[*partitionConsumer]none
	wait             chan none
	acks             sync.WaitGroup
	refs             int
}

func (c *consumer) newBrokerConsumer(broker *Broker) *brokerConsumer {
	bc := &brokerConsumer{
		consumer:         c,
		broker:           broker,
		input:            make(chan *partitionConsumer),
		newSubscriptions: make(chan []*partitionConsumer),
		wait:             make(chan none),
		subscriptions:    make(map[*partitionConsumer]none),
		refs:             0,
	}

	go withRecover(bc.subscriptionManager)
	go withRecover(bc.subscriptionConsumer)

	return bc
}

// The subscriptionManager constantly accepts new subscriptions on `input` (even when the main subscriptionConsumer
// goroutine is in the middle of a network request) and batches it up. The main worker goroutine picks
// up a batch of new subscriptions between every network request by reading from `newSubscriptions`, so we give
// it nil if no new subscriptions are available. We also write to `wait` only when new subscriptions is available,
// so the main goroutine can block waiting for work if it has none.
func (bc *brokerConsumer) subscriptionManager() {
	var buffer []*partitionConsumer

	for {
		if len(buffer) > 0 {
			select {
			case event, ok := <-bc.input:
				if !ok {
					goto done
				}
				buffer = append(buffer, event)
			case bc.newSubscriptions <- buffer:
				buffer = nil
			case bc.wait <- none{}:
			}
		} else {
			select {
			case event, ok := <-bc.input:
				if !ok {
					goto done
				}
				buffer = append(buffer, event)
			case bc.newSubscriptions <- nil:
			}
		}
	}

done:
	close(bc.wait)
	if len(buffer) > 0 {
		bc.newSubscriptions <- buffer
	}
	close(bc.newSubscriptions)
}

// subscriptionConsumer ensures we will get nil right away if no new subscriptions is available
func (bc *brokerConsumer) subscriptionConsumer() {
	<-bc.wait // wait for our first piece of work

	for newSubscriptions := range bc.newSubscriptions {
		bc.updateSubscriptions(newSubscriptions)

		if len(bc.subscriptions) == 0 {
			// We're about to be shut down or we're about to receive more subscriptions.
			// Either way, the signal just hasn't propagated to our goroutine yet.
			<-bc.wait
			continue
		}

		response, err := bc.fetchNewMessages()
		if err != nil {
			Logger.Printf("consumer/broker/%d disconnecting due to error processing FetchRequest: %s\n", bc.broker.ID(), err)
			bc.abort(err)
			return
		}

		bc.acks.Add(len(bc.subscriptions))
		for child := range bc.subscriptions {
			child.feeder <- response
		}
		bc.acks.Wait()
		bc.handleResponses()
	}
}

func (bc *brokerConsumer) updateSubscriptions(newSubscriptions []*partitionConsumer) {
	for _, child := range newSubscriptions {
		bc.subscriptions[child] = none{}
		Logger.Printf("consumer/broker/%d added subscription to %s/%d\n", bc.broker.ID(), child.topic, child.partition)
	}

	for child := range bc.subscriptions {
		select {
		case <-child.dying:
			Logger.Printf("consumer/broker/%d closed dead subscription to %s/%d\n", bc.broker.ID(), child.topic, child.partition)
			close(child.trigger)
			delete(bc.subscriptions, child)
		default:
			// no-op
		}
	}
}

// handleResponses handles the response codes left for us by our subscriptions, and abandons ones that have been closed
func (bc *brokerConsumer) handleResponses() {
	for child := range bc.subscriptions {
		result := child.responseResult
		child.responseResult = nil

		if result == nil {
			if preferredBroker, err := child.preferredBroker(); err == nil {
				if bc.broker.ID() != preferredBroker.ID() {
					// not an error but needs redispatching to consume from prefered replica
					child.trigger <- none{}
					delete(bc.subscriptions, child)
				}
			}
			continue
		}

		// Discard any replica preference.
		child.preferredReadReplica = -1

		switch result {
		case errTimedOut:
			Logger.Printf("consumer/broker/%d abandoned subscription to %s/%d because consuming was taking too long\n",
				bc.broker.ID(), child.topic, child.partition)
			delete(bc.subscriptions, child)
		case ErrOffsetOutOfRange:
			// there's no point in retrying this it will just fail the same way again
			// shut it down and force the user to choose what to do
			child.sendError(result)
			Logger.Printf("consumer/%s/%d shutting down because %s\n", child.topic, child.partition, result)
			close(child.trigger)
			delete(bc.subscriptions, child)
		case ErrUnknownTopicOrPartition, ErrNotLeaderForPartition, ErrLeaderNotAvailable, ErrReplicaNotAvailable:
			// not an error, but does need redispatching
			Logger.Printf("consumer/broker/%d abandoned subscription to %s/%d because %s\n",
				bc.broker.ID(), child.topic, child.partition, result)
			child.trigger <- none{}
			delete(bc.subscriptions, child)
		default:
			// dunno, tell the user and try redispatching
			child.sendError(result)
			Logger.Printf("consumer/broker/%d abandoned subscription to %s/%d because %s\n",
				bc.broker.ID(), child.topic, child.partition, result)
			child.trigger <- none{}
			delete(bc.subscriptions, child)
		}
	}
}

func (bc *brokerConsumer) abort(err error) {
	bc.consumer.abandonBrokerConsumer(bc)
	_ = bc.broker.Close() // we don't care about the error this might return, we already have one

	for child := range bc.subscriptions {
		child.sendError(err)
		child.trigger <- none{}
	}

	for newSubscriptions := range bc.newSubscriptions {
		if len(newSubscriptions) == 0 {
			<-bc.wait
			continue
		}
		for _, child := range newSubscriptions {
			child.sendError(err)
			child.trigger <- none{}
		}
	}
}

func (bc *brokerConsumer) fetchNewMessages() (*FetchResponse, error) {
	request := &FetchRequest{
		MinBytes:    bc.consumer.conf.Consumer.Fetch.Min,
		MaxWaitTime: int32(bc.consumer.conf.Consumer.MaxWaitTime / time.Millisecond),
	}
	if bc.consumer.conf.Version.IsAtLeast(V0_9_0_0) {
		request.Version = 1
	}
	if bc.consumer.conf.Version.IsAtLeast(V0_10_0_0) {
		request.Version = 2
	}
	if bc.consumer.conf.Version.IsAtLeast(V0_10_1_0) {
		request.Version = 3
		request.MaxBytes = MaxResponseSize
	}
	if bc.consumer.conf.Version.IsAtLeast(V0_11_0_0) {
		request.Version = 4
		request.Isolation = bc.consumer.conf.Consumer.IsolationLevel
	}
	if bc.consumer.conf.Version.IsAtLeast(V1_1_0_0) {
		request.Version = 7
		// We do not currently implement KIP-227 FetchSessions. Setting the id to 0
		// and the epoch to -1 tells the broker not to generate as session ID we're going
		// to just ignore anyway.
		request.SessionID = 0
		request.SessionEpoch = -1
	}
	if bc.consumer.conf.Version.IsAtLeast(V2_1_0_0) {
		request.Version = 10
	}
	if bc.consumer.conf.Version.IsAtLeast(V2_3_0_0) {
		request.Version = 11
		request.RackID = bc.consumer.conf.RackID
	}

	for child := range bc.subscriptions {
		request.AddBlock(child.topic, child.partition, child.offset, child.fetchSize)
	}

	return bc.broker.Fetch(request)
}

redpajama_set_name: RedPajamaGithub


text:
Collaborative "Calling the Question" Project to Launch this Summer
Posted by Sandy Heierbacher | May 14th, 2004
The Mainstream Media Project and the Harvard Global Negotiation Project, in cooperation with MoveOn.org, are launching a joint initiative this summer called the Calling the Question project. The Calling the Question initiative is a multi-year initiative to shift the national conversation from partisanship to problem-solving by engaging a broad spectrum of the public in calling in to talk radio, querying candidates in media and live appearances, and reframing policy debates by asking open, breakthrough, "third side" questions that blame no one but encourage us to think in practical terms about what we can do together to resolve the challenges that confront us all. The aim of this initiative is to reach across the divide between thoughtful progressives and thoughtful conservatives to catalyze "convergence conversations" that could contribute to a broader de-polarization of an increasingly divided electorate and society. Click below for more details and contact info.
Calling the Question
A Joint Initiative of The Mainstream Media Project & The Harvard Global Negotiation Project
The 2004 campaign season threatens to become the most polarized in recent memory. Candidates and parties are locked in a brutal blame game that only further alienates a public that has already largely seceded from politics out of disgust with the lack of progress on a host of urgent problems. Politicians across the spectrum bemoan the lack of civility and mutual respect but appear powerless to reverse the downward trend. All agree that this polarization is paralyzing our ability to effectively address the unprecedented convergence of crises we face both nationally and globally.
Yet at the same time, there is increasing evidence that beneath this poisonous partisanship and outside the Beltway blame game we as a people share far more than we realize. Day after day, moment after moment, we cooperate with one another in innumerable ways despite our apparently irreconcilable differences. Politicians and the media both profit in the near term by accentuating these differences, but most ordinary Americans are less interested in prosecuting the argument than in finding answers. Much of the public is more pragmatic than ideological. In survey after survey, they reveal their concern and frustration with politicians who attack each other rather than the problem. They yearn for the kind of "can-do" attitude that built this country and for which it is justly celebrated — a people that rolls up its sleeves, puts shoulder to shoulder and moves aside all obstacles in pursuit of a practical solution. It is this "silent majority" of pragmatic Americans that we plan to mobilize as a base to advocate for "the whole" – the common interest — in addition to their own particular points of view.
The Calling the Question initiative is a multi-year initiative to shift the national conversation from partisanship to problem-solving by engaging a broad spectrum of the public in calling in to talk radio, querying candidates in media and live appearances, and reframing policy debates by asking open, breakthrough, "third side" questions that blame no one but encourage us to think in practical terms about what we can do together to resolve the challenges that confront us all. The aim of this initiative is to reach across the divide between thoughtful progressives and thoughtful conservatives to catalyze "convergence conversations" that could contribute to a broader de-polarization of an increasingly divided electorate and society.
The phrase, "Calling the Question," refers to a parliamentary procedure that occurs at the end of extensive debate, which says in effect, "Okay, so what do we do now?" In many ways, the challenges we face both nationally and globally are of such a scale and severity that we are collectively being forced to "call the question" – to cease bickering and decide what we are going to do together to effectively address them. The phrase has particular relevance for our work since it is focused both on calling in to talk radio, the town meeting of our time, and posing the kinds of open, breakthrough questions that shift our focus from feuding to fixing, from partisanship to problem-solving.
Purpose & Potential Outcomes
– To catalyze a shift in the public debate from who's to blame to how to fix it, from the past into the present and future, whatever the issue at stake
– To move away from leading questions that actually conceal a one-sided answer leaving no room for anyone else to join in the search for a solution that works for all
– To move us from opposite sides of the table shoving the problem towards one another to the same side of the table facing the problem shoulder-to-shoulder
– To motivate those Americans who are not fixed in partisan positions to step into their pivotal role as a pragmatic mediating force that calls on all parties to come together to engage in a joint search for solutions that meet the highest priorities of each
– To encourage a latent convergence between thoughtful progressives and thoughtful conservatives in opposition to the power-obsessed politics of this era and prepared to search for common ground in the "no man's land" between the warring parties
– To catalyze a broader shift in the national conversation from partisanship to problem-solving by priming the pump in talk radio and other media, in candidate appearances and issue forums through a broad-based, long-term public effort, since this shift will take many years to penetrate deeply and supplant the blame game. We hope by our efforts to trigger a much larger and more spontaneous shift
Organizational Structure and Support
The Mainstream Media Project and the Harvard Global Negotiation Project are launching this joint initiative, the Calling the Question Project in pilot form in the spring of 2004 with the cooperation of MoveOn.org. The project will be officially launched in the summer of 2004 with an anticipated core staff of three full-time positions and extensive administrative and technical support from both organizations. Principal staff will be located at the offices of the Mainstream Media Project in Arcata, California with additional staff and colleagues in New York, Massachusetts and elsewhere.
How will the initiative work?
Calling the Question project staff will enlist participation in the initiative by large membership groups from among progressive, nonpartisan and moderately conservative organizations nationwide with an interest in creating a new space for public problem-solving in the midst of a dangerously polarized election-year environment. Initial participants include MoveOn.org (the nonpartisan arm of the Internet-based organization) and community and professional mediators enlisted through the Association for Conflict Resolution, mediators.com, and other networks. One of the early tasks of project staff will be to broaden this base of participation to include a wider spectrum of political perspectives in order to assure balance and encourage cross-fertilization between thoughtful progressives and thoughtful conservatives.
A small-scale pilot project is currently underway, with callers drawn from MoveOn.org being enlisted and trained to call in to talk radio in a few selected cities. The purpose of this experiment is to provide information about how best to go about organizing this unprecedented effort on a broader scale. Initiative organizers are building multiple feedback loops into the process to enable us to quickly learn from participants what works and what doesn't. The goal of establishing rapid and accurate feedback mechanisms is to create a "learning organization" as a model for the kind of learning society we seek to promote in the larger world through the public problem-solving process we advocate. Central to this objective is the understanding that we alone don't have all the answers. We will only discover them in the course of inventing solutions that reflect widely shared values and stand the test of practicality ("What works?") rather than in following the rigid commandments of a preordained ideology.
Before the initiative is publicly launched in the summer or fall of 2004, a wide range of organizations and individuals spanning the progressive, center, and moderate conservative portions of the political spectrum will be enlisted to either participate in or endorse the project. Careful consideration will be given to framing the initiative as a nonpartisan effort focused on problem-solving rather than on gaining political advantage for one side or another. At the same time, we will encourage those with strong political views to participate, with the understanding that adherence to one's own values, principles and perspectives in no sense inhibits one's ability to participate in an effective problem-solving process. Nor need we agree on everything to be able to co-create solutions to particular problems; we do it all the time in our personal and professional lives, sometimes without even realizing it. To exert a real influence on the national conversation, this initiative needs to engage people and organizations that adhere to differing views with conviction and commitment. What's critical is that this firmness be balanced by a flexibility that is willing to hear and accommodate differing perspectives.
Call-in participants will be matched by computer and organized into teams of three or four to provide mutual support and coaching and to monitor and follow up on one another in calling radio programs. We will offer training to trainers by conference call in how to ask "third side," breakthrough questions. They in turn will train others, thereby quickly disseminating the skills required for effective "third side" work. Initiative participants will also be encouraged to raise the same questions with political candidates, office-holders and policymakers at all levels of government as a basic problem-solving tool. Over time, with feedback and design help from participants, initiative organizers will create training materials for those wishing to make use of these techniques in these other venues.
Mark Sommer
The Mainstream Media Project
msommer@mainstream-media.net
Harvard Global Negotiation Project
jweiss@law.harvard.edu
Tags: current issues, public participation


BACKGROUND: Adenotonsillectomy is commonly performed in children with the obstructive sleep apnea syndrome, yet its usefulness in reducing symptoms and improving cognition, behavior, quality of life, and polysomnographic findings has not been rigorously evaluated. We hypothesized that, in children with the obstructive sleep apnea syndrome without prolonged oxyhemoglobin desaturation, early adenotonsillectomy, as compared with watchful waiting with supportive care, would result in improved outcomes.
METHODS: We randomly assigned 464 children, 5 to 9 years of age, with the obstructive sleep apnea syndrome to early adenotonsillectomy or a strategy of watchful waiting. Polysomnographic, cognitive, behavioral, and health outcomes were assessed at baseline and at 7 months.
RESULTS: The average baseline value for the primary outcome, the attention and executive-function score on the Developmental Neuropsychological Assessment (with scores ranging from 50 to 150 and higher scores indicating better functioning), was close to the population mean of 100, and the change from baseline to follow-up did not differ significantly according to study group (mean [±SD] improvement, 7.1±13.9 in the early-adenotonsillectomy group and 5.1±13.4 in the watchful-waiting group; P=0.16). In contrast, there were significantly greater improvements in behavioral, quality-of-life, and polysomnographic findings and significantly greater reduction in symptoms in the early-adenotonsillectomy group than in the watchful-waiting group. Normalization of polysomnographic findings was observed in a larger proportion of children in the early-adenotonsillectomy group than in the watchful-waiting group (79% vs. 46%).
CONCLUSIONS: As compared with a strategy of watchful waiting, surgical treatment for the obstructive sleep apnea syndrome in school-age children did not significantly improve attention or executive function as measured by neuropsychological testing but did reduce symptoms and improve secondary outcomes of behavior, quality of life, and polysomnographic findings, thus providing evidence of beneficial effects of early adenotonsillectomy. (Funded by the National Institutes of Health; CHAT ClinicalTrials.gov number, NCT00560859.).
This entry was posted in New England Journal of Medicine and tagged Adenoidectomy, Obstructive Sleep Apnea, Tonsillectomy by E. Lawson. Bookmark the permalink.


Stone Harbor Mayor Suzanne Walters said the Borough will need a replenishment project, hopefully in the fall. The Borough is seeking state funding for 75% of a beach replenishment, which will likely cost several million dollars.
The erosion effects 98th through 111th Streets. The beach entrances will be graded to make them accessible.
As a side note- I walked that section of beach this morning- at high tide. There is definite damage to the dunes and less dry sand- but the beach is still there.
This entry was posted in Life at the Shore, Stone Harbor, New Jersey- News. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.