text:
Guarantees to Non-Nuclear Nations
By Mason Willrich
Since the Nuclear Test Ban Treaty in 1963, American arms-control policy has been dominated by efforts to prevent the further spread of nuclear weapons capabilities. Proposals for a non-proliferation agreement-a treaty which would prohibit signatory states not already having nuclear weapons from acquiring them-have recently been put on the table by both East and West in the form of draft treaties, but beyond that little real progress has been made. Meanwhile, the growing nuclear capability of Communist China has led a number of non-nuclear countries to reassess their strategic security positions and to ponder whether they, too, do not want to manufacture nuclear weapons. To deter them, the nuclear powers have intensified their search for something to sweeten the non-proliferation pot.
The United States has held out the prospect of support against nuclear threats to countries which continue to refrain from acquiring nuclear weapons of their own. On October 18, 1964, before the dust from the first Chinese nuclear explosion had settled, President Johnson declared that the United States would continue to work against "nuclear spread." He then said: "The nations that do not seek national nuclear weapons can be sure that, if they need our strong support against some threat of nuclear blackmail, then they will have it."[i] The United Kingdom has also included in its negotiating position the possibility of some form of guarantee against nuclear attack for those nations willing to pledge themselves to a course of nuclear-weapons abstinence. To date, however, no nuclear power has been prepared to be specific about how such guarantees might work.
To guarantee the security of a nation without nuclear weapons against nuclear attack seems at first glance to be a reasonable, in fact minimal, price to pay to avoid proliferation. However, the deeper implications of nuclear guarantees need to be examined before we decide to move from the domain of the speechmaker, where the matter presently rests, to the kind of foreign policy upon which nations act.
First, we should clarify what we mean by a "national nuclear weapons capability." It rests on the possession of nuclear weapons, means of delivery and the ability of the national government to make its own decision on the use of the weapons. None of these three elements can be ignored. An effective delivery system in particular may be more difficult to acquire in some cases than nuclear warheads.
The present non-nuclear nations seem to fall into two categories: those with sufficient technological expertise, industrial competence and economic base to acquire a nuclear weapons capability, once they have made the decision, within a reasonable period of time-say five years; and those which are simply not close enough to the nuclear "take-off point" to be a primary concern. Admittedly, however, the take-off point depends a great deal on a nation's willingness to make the necessary economic sacrifices.
There remains the possibility, too, that states may obtain a nuclear weapons capability with substantial outside assistance, ranging from technical and material aid to the outright transfer of nuclear warheads or delivery vehicles. The two major nuclear powers seem fairly well agreed to avoid giving assistance in making warheads. The Soviet Union is not happy with the results of having helped Communist China; and the United States is not likely to transfer nuclear warheads to the control of any other single nation, even though it will not at present agree to a non-proliferation treaty which forecloses the option of developing a multilateral nuclear force within NATO. Control over the transfer of nuclear-capable delivery systems is, however, complicated by the fact that many types of aircraft can be adapted to carrying either conventional or nuclear payloads, and there appears to be less agreement between the two powers in this matter. The United States has transferred outright to other countries both ground- to-ground missiles and aircraft, and the Soviet Union has at least transferred aircraft.
Communist China does not adhere to the philosophy of non-proliferation, but its own requirements will probably prevent it from offering substantial nuclear aid abroad, either warheads or delivery systems, in the near future.
In discussing various possible types of guarantees for non-nuclear nations we may find it helpful to break the problem into three components: first, possible variations in the nature of the undertaking; next, possible parties to the undertaking; and finally, strategic postures necessary to support it.
In regard to the undertaking itself, both form and substance must be carefully considered. A guarantee might take a variety of forms, from a unilateral statement of national policy to a solemn treaty commitment. Even though a unilateral declaration would not be legally binding it could doubtless be regarded as a definite "commitment" by the guarantor, especially, in the case of the United States, once domestic public opinion had solidified in support of the policy. But the non-nuclear beneficiary would not be likely to regard such a simple statement of policy as a sufficient guarantee of its security.
Even a binding treaty obligation is likely to lose some of its credibility over time, especially if the good relations between the states prevailing at the start are later impaired for one reason or another. And in any case, any treaty obligation which restricts a nation's freedom of action in matters touching its own security comes into doubt when that nation feels its security in jeopardy.[ii]
In summary, the force of a unilateral policy expressed in sufficient detail to make clear that it will be a basis for future action should not be underestimated, nor should the binding character of a guarantee in treaty form be overestimated.
As for the substance of the guarantee, a key consideration would be the circumstances in which it could be invoked. Assurances of general military assistance are incorporated into various existing alliances. In the NATO treaty, for instance, assistance is to be given if an "armed attack" occurs "in Europe or North America." A parallel obligation under a nuclear guarantee could be to take action in case of "nuclear attack" against the territory of designated non-nuclear states or regions. This would mean that the guarantor would not be compelled to do anything until a nuclear attack had actually occurred.
For a potential victim, that would be little comfort. What would matter would be the strength of the deterrent against nuclear attack created by the probability or possibility of retaliation by the guarantor. But the circumstances which create reliability in the eyes of allies on the one hand, and credibility in the minds of potential adversaries on the other, may not always be identical.
The nuclear aspect of the U.S. security guarantee under NATO is believable to many of our European allies partly because we have committed substantial numbers of troops in West Germany. It is rightly inferred that the United States would not expose a large number of its own men along the central European front without being willing to go all the way up the conflict escalator, if necessary, in defense of the region. At the same time, from our point of view, it is important that NATO be able to withstand a conventional assault by conventional means, in order to keep nuclear weapons in the last-resort category where they belong.
We should not over-generalize from NATO defense problems, but the NATO experience and others do suggest that nuclear guarantees cannot easily be divorced from the issues of conventional defense. To work as a non- proliferation inducement, a guarantee of security formally confined to cases of "nuclear attack" may well need to entail a further, implicit commitment.
The nature of that commitment is an important question. In the event of an armed attack in the NATO area, the United States is obligated to take "forthwith . . . such action as it deems necessary, including the use of armed force." It is apparent that the military commitment is imprecise and the nature of the response is left largely to unilateral determination. In the SEATO treaty and several bilateral defense treaties the language of the guarantee is even weaker-the obligation on a signatory being merely to "act to meet the common danger in accordance with its constitutional processes." The question arises whether, in light of these treaties, any potential guarantor power would be prepared to commit itself in advance to making a sufficiently well-defined response to justify a non-nuclear nation in placing full reliance on it.
A guarantee could range from unilateral to universal. One nuclear power could simply declare to the world, as the United States seems to have done, its intention to come to the aid of non-nuclear countries that are victims of nuclear attack. Or it might exclude certain countries-for example, the Communist countries-or be limited to a single designated country. A policy for the benefit of a particular non-nuclear nation may have some utility, especially if expressly addressed to an imminent nuclear threat. A unilateral declaration addressed to the world at large will probably not be taken too seriously by anyone. In both instances, the absence of a definite treaty obligation would limit credibility.
A joint declaration by two or more nuclear powers would be one way of strengthening the guarantee. An example would be for the United States and the Soviet Union to guarantee jointly the security of non-nuclear nations against nuclear attack. This degree of Soviet-American coöperation has so far been well beyond reach, and the Soviet Union's problems with the Chinese, as well as its deep-seated mistrust of the U.S. nuclear posture, seem to preclude such an approach now. But it might become more attractive, especially as applied to countries outside the European area, as the Chinese nuclear menace grows and if the Southeast Asian conflict is moderated.
In the case of a non-nuclear nation which already has mutual security arrangements with a nuclear power, a specific nuclear guarantee might perhaps be viewed as adding to the strength of the overall defense commitment. However, not all non-nuclear nations would find a simple bilateral arrangement agreeable. Those nations not already in alliance with either the United States or the Soviet Union would consider a guarantee from either country an unacceptable departure from a non-aligned position. Here a joint guarantee, or possibly a guarantee "through the United Nations," might ease the problem.
It may be useful to revert at this point to President Johnson's statement of October 18, 1964, still the most explicit official U.S. position on the subject of nuclear security guarantees.[iii] He described the circumstances which would invoke American support as "a threat of nuclear blackmail." The President added that "if they need our strong support . . . they will have it." A simple declaration of "strong support" may well be lost in the background noise generally pervading international diplomacy.
Since the American position is couched in sufficiently ambiguous terms not to disturb anyone, we should not expect it to have a measurable effect on the decisions of governments which possess the possibility of developing nuclear weapons.
A nuclear guarantee which involved the deployment of nuclear forces in a non-nuclear country might be more effective in dissuading it from developing a nuclear capability of its own. Even though the guarantor power retained full ownership and control of those forces, some muscle would obviously be added to its guarantee. But such a course might also, it is true, raise strategic and tactical problems similar to those that have plagued NATO for over a decade.
This suggests a further question: what effects would nuclear guarantees have on existing alliance systems? The security of some of our closest allies already rests on a U.S. nuclear guarantee, backed up by extensive and elaborate deployments of both nuclear and non-nuclear forces. To a somewhat lesser extent our collective defense treaties guarantee the security of 28 other nations outside NATO.
New nuclear guarantees would probably have to be more specific than the existing loosely-worded alliance obligations, or alternatively would have to provide physical evidence of the undertaking in the form of deployed nuclear forces. But the stronger the nuclear guarantees given to states outside the alliance structure, the more likely it is to demoralize our present allies and lead them to make increased demands on us, or possibly to pay increased attention to General de Gaulle's nuclear thesis.
It is worth noting that the Soviet Union would probably arouse less dissent within the Warsaw Pact if it offered a nuclear guarantee to a non-member than the United States would find among its allies if it proposed comparable action. But for important reasons growing out of the conflict with China, the Soviet Union is less likely than the United States to entertain the notion seriously.
It remains to consider the potential effect of offering nuclear guarantees to specific countries which have a nuclear option. India, Israel and Sweden deserve first attention.[iv] Each has the prerequisites, each has a serious security problem and none is under the collective security umbrella of either the United States or the Soviet Union, at least in any formal sense.
India, today a target for nuclear blackmail by Communist China, is of primary concern to those interested in keeping the nuclear club from expanding. It has a relatively advanced civil nuclear industry, including its own plant for separating plutonium from irradiated reactor fuels, and though its economy is in desperate shape it could probably stand up under the burden of a modest military nuclear program. India is clearly capable of providing itself with the warhead component.
India would not find it so easy to come by a delivery system. Moreover, although Communist China will be able to strike from its own territory at India's vitals with glorified V-2s, the reverse is not true for India. To make a nuclear strike at Peking or the industrial heartland in Manchuria, India will require a long-range delivery system-either long-range land- based missiles, bomber aircraft or medium-range sea-based missiles. Conversion of a portion of the Indian civil jet-transport fleet is, of course, a possibility, but any savings would be at the expense of an increase in vulnerability. With the added burden of the delivery system, the cost to India of exercising its nuclear option is substantially increased and should provide a powerful argument against a decision to "go nuclear."
The effect of India's decision on Pakistan also deserves consideration. Pakistan would hardly consider India's acquisition of nuclear armaments as a step toward peaceful relations. Pakistan shows little signs of giving up its ability to play both ends of the Sino-Indian conflict, and in the circumstances India cannot hope to obtain Pakistan's support for embarking on a nuclear-weapons program on behalf of all the nations south of the Himalayas. The potential snowball effect in South Asia of such a program is apparent.
Would a guarantee against nuclear blackmail help India decide to forego the chance of developing a nuclear capability? Since Communist China began setting off nuclear blasts, India has raised its price for making an unequivocal renunciation; it indicates that it wants considerably more than a simple guarantee. An undertaking "through the United Nations" to safeguard the security of non-nuclear nations is only part of its demand. Also included are an agreement by the nuclear powers not to transfer nuclear weapons to other powers, a comprehensive nuclear test ban and a freeze on further production of nuclear weapons and delivery systems, coupled with substantial reductions in existing inventories. Moreover, India has not excluded Communist China from the list of required subscribers to a non-proliferation agreement. It seems clear that a "paper" guarantee will not be enough for India. Furthermore, any guarantee other than one by the United Nations, or conceivably one given jointly by the United States and the Soviet Union, would be unacceptable as contrary to India's commitment to non-alignment.
Israel's situation is different from India's in almost every respect. The technological and industrial comparison between Israel and the state which constitutes its chief threat is to a large extent the reverse of India's. Israel is clearly ahead of the United Arab Republic in terms of the base upon which a nuclear weapons capability can be built. Moreover, one or two nuclear warheads dropped on the Aswan Dam could submerge the whole lower Nile Valley. Israel may, indeed, view nuclear weapons as necessary insurance against the gradual dwindling of its present superiority in conventional forces.
In addition to cost, the basic deterrent to Israel's adoption of a nuclear weapons program is uncertainty about the reaction of interested powers outside the Middle East. The U.A.R. could be expected to respond with an outburst of righteous indignation and a demand for nuclear help. Conceivably the Soviet Union in these circumstances would make an exception to its adamant non-proliferation policy. If it were to step in and redress the nuclear balance in the Middle East, could Israel be certain what the U.S. reaction would be?
Israel has not fixed a price for its pledge to abstain from nuclear weapons. For some time, though, it has been interested in obtaining an assurance of security from the United States. From the Israeli point of view, even an American guarantee confined to assistance against nuclear attack might hold distinct advantages. So far, however, the United States has refused to make a commitment to one side in the Arab-Israeli conflict.
The United States might accept a guarantee generalized to include all the nations of the Middle East. Such a guarantee might be given in coöperation with the Soviet Union. In such an arrangement Israel and the Arab nations alike would agree not to acquire nuclear weapons and the United States and the Soviet Union jointly would guarantee all of them against nuclear attack. Steps to create such a "nuclear free zone" in the Middle East could be taken, if necessary, outside the framework of current negotiations on other non-proliferation measures. Political obstacles for both the Israelis and the Arabs are formidable; moreover, open coöperation with the United States in the Middle East is probably impossible for the Soviet Union at present. But the all-round gain in stability in the Middle East that would result from avoiding a nuclear arms race there justifies at least an effort to secure a breakthrough.
The issue for Sweden is whether its neutrality will be better served with or without nuclear weapons in its arsenal. Sweden would not attempt to mount a major nuclear force against the Soviet Union; its position relative to the Soviet Union is even more hopeless in a quantitative sense than India's to China. But unlike India, Sweden's medium-range land-based missiles could reach some vital targets in the Soviet Union. Sweden may also wish to keep its nuclear option open until it sees how West Germany's nuclear ambitions are to be satisfied or denied.
Not surprisingly, given Sweden's exposed position, it asks something in return for its signature to an agreement not to acquire nuclear weapons. Generally, Swedish officials have talked in terms of a comprehensive nuclear test ban. In view of Sweden's traditional adherence to neutrality it is unlikely to welcome a security guarantee from the United States, and a guarantee from the Soviet Union would of course be rejected. A nuclear guarantee "through the United Nations" might be acceptable, but by itself it would hardly influence a Swedish decision whether or not to develop nuclear weapons.
The initial U.S. declaration of "strong support" for non-nuclear nations against threats of "nuclear blackmail" was intended to help stabilize the political atmosphere in the wake of Communist China's first nuclear achievement in 1964. Its carefully guarded phrases, reiterated on several occasions and most recently after China's third nuclear test, have not disturbed existing U.S. security arrangements.
Efforts to develop and implement a more definite policy of nuclear containment continue to occupy a place of top priority in the Administration's arms-control policy. As the urgency and dimensions of the problem increase, the United States is trying hard to shift from talk to action.
The particular problem of guarantees to non-nuclear nations is inseparable from the broad issues of collective security in the nuclear age. Neither purely nationalist solutions, alliances for mutual defense nor world-wide international organizations offer satisfactory solutions. And a policy of nuclear containment, to the extent it is successful, simply buys time.
How the present members of the nuclear club conduct themselves will substantially affect the club's ultimate size. But the final decision on whether to expand the membership rests primarily with the non-nuclear nations. As they approach their decisions, the offer of nuclear security guarantees of the kind talked about at present would seem to have at most a marginal bearing. Hopefully, non-nuclear nations will be influenced more by considerations of cost-effectiveness than national prestige. Perhaps a rational assessment of the net gain in security to be derived from acquiring a national nuclear-weapons capability will be the strongest deterrent to proliferation. In the long run, the world will avoid the multiplication of centers of nuclear decision-making and the creation of many-sided balances of nuclear terror only if there is a profound change in attitudes toward the role of force in pursuit of national interests, and if there is a redefinition of those interests in relation to a larger community of nations.
[i] Department of State Bulletin, November 2, 1964, p. 610-614.
[ii] Thus both U.S. and Soviet proposals for a non-proliferation treaty permit any party to withdraw "if it decides that extraordinary events, related to the subject matter of this Treaty, have jeopardized the supreme interest of its country/' This provision also appears in Article IV of the Nuclear Test Ban Treaty.
[iii] In a message to the Eighteen Nation Disarmament Conference on January 27, 1966, the President restated his policy in this respect, along with a general plea "to strengthen United Nations and other international security arrangements." Department of State Bulletin, February 21, 1966, p. 263. The pledge was again reiterated by the State Department in a statement of May 9, 1966, following Communist China's third nuclear blast.
[iv] There are, of course, other countries which have an even greater potential nuclear-weapons capability than those listed, in particular the Federal Republic of Germany, Canada and Japan. However, each of these countries is already under the U.S. security umbrella. Therefore, the relationship between a specific nuclear security guarantee and the incentives at work in these countries to acquire nuclear weapons will not be considered in this article.
More By Mason Willrich
World China International Institutions Arms Control & Disarmament Nuclear Weapons & Proliferation Johnson Administration
Kennan's Warning on Ukraine
Ambition, Insecurity, and the Perils of Independence
Frank Costigliola
China's Space Odyssey
What the Antisatellite Test Reveals About Decision-Making in Beijing
Bates Gill and Martin Kleiber
Will Nuclear Weapons Make A Comeback?
Why the Global Nonproliferation Regime Is Fraying
Eric Brewer


text:
Quest for perfection: sitting down with A Lange & Söhne CEO Wilhelm Schmid
By Michelle Johnson | 01 Sep 2021 | Style, Design
The industry leader exclusively tells Tempus about the ethos of subtle innovation that drives each generation of German watchmaking
German watchmaker A Lange & Söhne is on a mission to make the perfect timepiece. The evolution of each new expression of the brand's six "families" – the Lange 1, Zeitwerk, Saxonia, 1815, Richard Lange and Odysseus collections – is purposefully subtle, moving each individual watch by degrees to achieve an impossible level of perfection.
If this seems like a far cry from the flash and glamour one might expect from the world of watchmaking, it goes deeper: the brand has no celebrity ambassadors or red-carpet moments and its novelties consistently ignore annual trends or themes. Instead, A Lange & Söhne produces just 5,500 watches a year, with each expression limited in number due to the time-consuming level of craftsmanship that goes into each individual timepiece – with all parts polished and decorated by hand – and so the pace of innovation is determined not by external competition, but by the challenges of bringing daring new designs to life.
A Lange & Söhne's heritage of precise German watchmaking undoubtedly influences the brand's ethos today. Originally founded by Ferdinand Adolph Lange in Glashütte in 1845 (today's 1815 collection pays tribute to his birth year), the original company ceased to exist in 1948 following German occupation by the Soviet Union after the Second World War. In fact, the original manufactory was destroyed by Soviet bombing on 8 May 1945 – the last day of the war. In 1990, Ferdinand's great-grandson, Walter Lange – with the support of Swiss watchmakers – led the company's restoration, and its first new range of wristwatches debuted in 1994.
For Wilhelm Schmid, who joined the company as CEO in 2011, this combination of rich heritage and subtle innovation defines, perhaps, the most important characteristics of an A Lange & Söhne watch.
"'The subtle difference' was our theme for this year's Watches & Wonders, but actually we should make it our annual theme, because that's basically what we're all about," he says. "I believe that's what all fine watchmaking is about. It's the differences that only experts will appreciate and recognise, and those experts are who we build watches for. We only make 5,500 watches [a year], and that explains it all."
Here, Schmid speaks to Tempus about his vision for fine watchmaking, how necessity creates innovation and why he will never follow the trends.
Wilhelm, how do you define 'the subtle difference' ethos?
'The subtle difference' is very much our core message, and actually it unifies all of our different watches. Let's take the 2021 Lange 1 Perpetual Calendar, for example. As a German brand, we like to have a clear priority in how our dials are presented: the wearer wants to see the time, and then the date, very clearly. But a perpetual calendar has so many elements to work with, like the night-day indication, days of the months and the leap year indication.
Whether your perpetual calendar jumps instantaneously at midnight or takes an hour for each indication to find its place makes a big difference in its construction. We introduced the Lange 1 Moon Phase as the day-night indication, so the wearer knows whether its day or evening at a glance, and that's tied neatly into the perpetual calendar mechanism.
The 2021 Triple Split is another perfect example of this. Could you talk us through the creation process?
Innovation is the brief, and for that you have to look at the watch's history, really. We launched the Datograph in 1999, which was a pretty clear flyback chronograph and that inspired the Chronograph Rattrapante, which was a very complicated watch that could measure two different periods of times – comparative or additive – but only up to a minute.
That's when we said we need a Double Split to measure two-time measurements for up to 30 minutes. We launched our first Double Split in 2004. Eventually we said: "What if an event takes longer than 30 minutes?". So, the idea was born to create the Triple Split, first launched in 2018. Our 2021 expression can now measure two comparative or additive time incidents for up to 12 hours.
Where does the drive to create these technical improvements begin?
We have a huge advantage as a manufactory because we always start with the design of a watch; we don't take a movement and ask how we can use it again. Once we have finalised a design and identified which of our six watch collections it belongs to, and agreed upon the proportions and dimension, it's then up to our construction to work on making our dreams a reality – which is where the fight starts!
This method necessitates that everyone in our team must be very innovative, because we have to work out each element from scratch. For instance, our 2021 Lange 1 doesn't use the same perpetual calendar movement as the 2013 model, because our construction team said it would be better to build a more advanced movement to accommodate the new design, rather than change the design to fit an existing movement.
How important is A Lange & Söhne's heritage as you look to its future?
Tradition can be a burden or a foundation, depending on how you look at it. For us, history and tradition are a mindset, a set of values that we want to maintain regardless of how the world is changing. It's the way we respect each other and our clients. It's the way that we remain watchmakers at heart. We don't have celebrity brand ambassadors.
If you come to Watches and Wonders and enter our booth, the centre of our display is a giant watch. That's what we're all about. But, just as it's important to understand your past, you have to know that history never stands still. Whenever you think you're done, it is just a good beginning to get better.
How has your vision for the brand changed since you joined in 2011?
The great strength of good, solid companies that no one man or woman can change everything. It's a team effort that will make a company like ours keep moving, prevailing and succeeding. When I arrived, more than 10 years ago, it was clear that our distribution needed a revamp to become more international.
For me, it was clear that we needed to understand our customer better. That was the basis for our strategy to clarify the brand into a six-watch family, with flagship stores in New York, Tokyo, Singapore, Hong Kong, Beijing, Shanghai.
Who is your customer?
That's the most difficult question. What we have discovered is that, in watch collecting, you have people who collect on a theme (such as certain mechanism or types of watch) and collectors of certain brands. We realised there are collectors who really understand fine watchmaking on a deep level – something like the way a chronograph counter jumps will speak to them. This is our target group: collectors with a real understanding of watchmaking.
Is it important to maintain a level of hand-craftsmanship?
Our customers understand and appreciate if parts are hand-polished and decorated, rather than machine-finished. This means that, for watches like the Triple Split, we can only produce around 30-35 watches per year, with customers waiting up to three years for their watch. That's also why this year's version is aesthetically very different to the first. In 2018 we introduced a white gold with grey dial, now we come with pink gold and a blue dial.
Are wider watchmaking trends important to you?
When you only make 5,500 watches a year, trends are too short-lived to follow. That's why you don't see a green dial on our watches this year. That's not part of our design or development strategy. We will continue to develop our six watch families, and there's always a rhythm in it that determines our product development pipeline for the next seven years. Of course, as a watch lover, I keep track of different magazines and blogs, and it's very interesting to see different trends emerging – but you become very short-sighted if you follow all the trends all the time.
alange-soehne.com
Watches A Lange & Sohne design
By Rikesh Chauhan | 18 Jan 2022

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Error 400 when connecting Notion API to Power BI I'm trying to connect the Notion API to Power BI using the web connector in Power BI.  Here is a screenshot of the setup and the error that I'm getting..

Does anyone have any idea why this is happening?

A: You might need to add the version header:
https://developers.notion.com/reference/versioning

A: Besides informing Authorization, Notion-version, you might need to add
#"Content-Type" = application/json

In addition, it seems you're querying a database. Therefore, you'll follow this official link. For more info, check my own post about it.

redpajama_set_name: RedPajamaStackExchange


Sink on Right Advance Tabco BEV-30-144 Enclosed Base Beverage Table - 144"
In addition to open base tables, Advance Tabco offers a variety of enclosed base tables including sliding door and hinged door styles. Sliding doors glide with ease and feature integral door tracks with no breakable parts, and are removable for cleaning purposes. Another option, the hinged door table, features a noise-reduction design and stays closed magnetically for an efficient solution to your preparation and storage needs.
Unites are also available without doors, and all can be customized with a flat top, a 1 1/2" backsplash, or a 5" backsplash. For storage convenience, choose between a fixed or adjustable mid-shelf. Adjustable stainless steel bullet feet ensure that the table is level, and the standard 6" clearance allows for easy cleaning. Made of heavy duty 14 gauge, type 304 stainless steel, these base tables are built to last.
This informative video will provide you with a brief overview of the design features and benefits of the Advance Tabco enclosed base tables!
This Advance Tabco BEV-30-144 enclosed base beverage table is the perfect way to organize hot and cold beverage centers at server stations or in cafeteria type settings. It features a 10" high full length backsplash with a standard outlet for plugging in coffee brewers or cold beverage dispensers. Two undershelves provide ample storage space for back up mugs, glassware, dinnerware, or trays.
The beverage table's countertop is made of heavy duty 14 gauge type 304 series stainless steel that is polished to an eye-catching mirror finish, while the body is made of 18 gauge type 304 series stainless steel. The countertop is furnished with an embossed no-drip offset edge, which helps contain drips and spills and channels them into the table's built in urn trough. The Advance Tabco BEV-30-144 enclosed base beverage table also includes a 14" x 16" x 12" sink with a splash mounted gooseneck faucet.
Work Surface Height: 35 1/2"
Advance Tabco BEV-30-144 Enclosed Base Beverage Table - 144"


text:
Q: Can anyone identify the function that represents this infinite product? $$\lim_{\omega \to \infty}
\prod_{N=1}^{\omega} {{1+e^{b \cdot c^{-N}}} \over 2}$$
For instance, the Lerch Transcendent is a analogous example of a special function that defines the sum of a useful infinite series.
If it helps,
$$
\prod_{N=1}^{\infty} {{1+e^{b \cdot c^{-N}}} \over 2} \sim \left({{e^b-1} \over b} \right)^{1/(c-1)}$$
This asymptotic is exact if $c=2$. Here's a non-trivial application of the above.
I'd like the name of this infinite product so that I can learn more about it. For instance, does it have a closed form? I know that for $c=2$ it does. Also, it'd make it easier to generalize the above to other product series I have in mind. For instance, consider the possibility that the above product could be a specific example of a more general function.
P.S. I'd love to name it myself, if there isn't a name for it. Where would I go?
P.P.S Would I have better luck on MO?


text:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>Using the EventManager — Zend Framework 2 2.3.0dev documentation</title>

    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />

    <link rel="top" title="Zend Framework 2 2.3.0dev documentation" href="../index.html" />
    <link rel="next" title="Advanced Configuration Tricks" href="config.advanced.html" />
    <link rel="prev" title="Unit Testing a Zend Framework 2 application" href="unittesting.html" />

Navigation

          index

          next |

          previous |

Zend Framework 2 2.3.0dev documentation »

Using the EventManager¶

This tutorial explores the various features of <tt class="docutils literal">Zend\EventManager</tt>.

Terminology¶

An Event is a named action.

A Listener is any PHP callback that reacts to an event.

An EventManager aggregates listeners for one or more named events, and
triggers events.

Typically, an event will be modeled as an object, containing metadata
surrounding when and how it was triggered, including the event name, what object
triggered the event (the “target”), and what parameters were provided. Events
are named, which allows a single listener to branch logic based on the
event.

Getting started¶

The minimal things necessary to start using events are:

An <tt class="docutils literal">EventManager</tt> instance

One or more listeners on one or more events

A call to <tt class="docutils literal">trigger()</tt> an event

The simplest example looks something like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15

use Zend\EventManager\EventManager;

$events = new EventManager();
$events->attach('do', function ($e) {
    $event = $e->getName();
    $params = $e->getParams();
    printf(
        'Handled event "%s", with parameters %s',
        $event,
        json_encode($params)
    );
});

$params = array('foo' => 'bar', 'baz' => 'bat');
$events->trigger('do', null, $params);

The above will result in the following:

Handled event "do", with parameters {"foo":"bar","baz":"bat"}

Note

Throughout this tutorial, we use closures as listeners. However, any valid
PHP callback can be attached as a listeners: PHP function names, static
class methods, object instance methods, functors, or closures. We use
closures within this post simply for illustration and simplicity.

If you were paying attention to the example, you will have noted the <tt class="docutils literal">null</tt>
argument. Why is it there?

Typically, you will compose an <tt class="docutils literal">EventManager</tt> within a class, to allow
triggering actions within methods. The middle argument to <tt class="docutils literal">trigger()</tt> is the
“target”, and in the case described, would be the current object instance. This
gives event listeners access to the calling object, which can often be useful.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

use Zend\EventManager\EventManager;
use Zend\EventManager\EventManagerAwareInterface;
use Zend\EventManager\EventManagerInterface;

class Example implements EventManagerAwareInterface
{
    protected $events;

    public function setEventManager(EventManagerInterface $events)
    {
        $events->setIdentifiers(array(
            __CLASS__,
            get_class($this)
        ));
        $this->events = $events;
    }

    public function getEventManager()
    {
        if (!$this->events) {
            $this->setEventManager(new EventManager());
        }
        return $this->events;
    }

    public function do($foo, $baz)
    {
        $params = compact('foo', 'baz');
        $this->getEventManager()->trigger(__FUNCTION__, $this, $params);
    }

}

$example = new Example();

$example->getEventManager()->attach('do', function($e) {
    $event  = $e->getName();
    $target = get_class($e->getTarget()); // "Example"
    $params = $e->getParams();
    printf(
        'Handled event "%s" on target "%s", with parameters %s',
        $event,
        $target,
        json_encode($params)
    );
});

$example->do('bar', 'bat');

The above is basically the same as the first example. The main difference is
that we’re now using that middle argument in order to pass the target, the
instance of <tt class="docutils literal">Example</tt>, on to the listeners. Our listener is now retrieving
that (<tt class="docutils literal">$e->getTarget()</tt>), and doing something with it.

If you’re reading this critically, you should have a new question: What is the
call to <tt class="docutils literal">setIdentifiers()</tt> for?

Shared managers¶

One aspect that the <tt class="docutils literal">EventManager</tt> implementation provides is an ability to
compose a <tt class="docutils literal">SharedEventManagerInterface</tt> implementation.

<tt class="docutils literal">Zend\EventManager\SharedEventManagerInterface</tt> describes an object that
aggregates listeners for events attached to objects with specific identifiers.
It does not trigger events itself. Instead, an <tt class="docutils literal">EventManager</tt> instance that
composes a <tt class="docutils literal">SharedEventManager</tt> will query the <tt class="docutils literal">SharedEventManager</tt> for
listeners on identifiers it’s interested in, and trigger those listeners as
well.

How does this work, exactly?

Consider the following:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

use Zend\EventManager\SharedEventManager;

$sharedEvents = new SharedEventManager();
$sharedEvents->attach('Example', 'do', function ($e) {
    $event  = $e->getName();
    $target = get_class($e->getTarget()); // "Example"
    $params = $e->getParams();
    printf(
        'Handled event "%s" on target "%s", with parameters %s',
        $event,
        $target,
        json_encode($params)
    );
});

This looks almost identical to the previous example; the key difference is that
there is an additional argument at the start of the list, <tt class="docutils literal">'Example'</tt>. This
code is basically saying, “Listen to the ‘do’ event of the ‘Example’ target,
and, when notified, execute this callback.”

This is where the <tt class="docutils literal">setIdentifiers()</tt> argument of <tt class="docutils literal">EventManager</tt> comes into
play.  The method allows passing a string, or an array of strings, defining the
name or names of the context or targets the given instance will be interested
in. If an array is given, then any listener on any of the targets given will be
notified.

So, getting back to our example, let’s assume that the above shared listener is
registered, and also that the <tt class="docutils literal">Example</tt> class is defined as above. We can then
execute the following:

1
2
3

$example = new Example();
$example->getEventManager()->setSharedManager($sharedEvents);
$example->do('bar', 'bat');

and expect the following to be <tt class="docutils literal">echo</tt>‘d:

Handled event "do" on target "Example", with parameters {"foo":"bar","baz":"bat"}

Now, let’s say we extended <tt class="docutils literal">Example</tt> as follows:

1
2
3

class SubExample extends Example
{
}

One interesting aspect of our <tt class="docutils literal">setEventManager()</tt> method is that we defined it
to listen both on <tt class="docutils literal">__CLASS__</tt> and <tt class="docutils literal">get_class($this)</tt>. This means that
calling <tt class="docutils literal">do()</tt> on our <tt class="docutils literal">SubExample</tt> class would also trigger the shared
listener! It also means that, if desired, we could attach to specifically
<tt class="docutils literal">SubExample</tt>, and listeners attached to only the <tt class="docutils literal">Example</tt> target would not
be triggered.

Finally, the names used as contexts or targets need not be class names; they can
be some name that only has meaning in your application if desired. As an
example, you could have a set of classes that respond to “log” or “cache” – and
listeners on these would be notified by any of them.

Note

We recommend using class names, interface names, and/or abstract class names
for identifiers. This makes determining what events are available easier, as
well as finding which listeners might be attaching to those events.
Interfaces make a particularly good use case, as they allow attaching to a
group of related classes a single operation.

At any point, if you do not want to notify shared listeners, pass a <tt class="docutils literal">null</tt>
value to <tt class="docutils literal">setSharedManager()</tt>:

$events->setSharedManager(null);

and they will be ignored. If at any point, you want to enable them again, pass
the <tt class="docutils literal">SharedEventManager</tt> instance:

$events->setSharedManager($sharedEvents);

Wildcards¶

So far, with both a normal <tt class="docutils literal">EventManager</tt> instance and with the
<tt class="docutils literal">SharedEventManager</tt> instance, we’ve seen the usage of singular strings
representing the event and target names to which we want to attach. What if you
want to attach a listener to multiple events or targets?

The answer is to supply an array of events or targets, or a wildcard, <tt class="docutils literal">*</tt>.

Consider the following examples:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

// Multiple named events:
$events->attach(
    array('foo', 'bar', 'baz'), // events
    $listener
);

// All events via wildcard:
$events->attach(
    '*', // all events
    $listener
);

// Multiple named targets:
$sharedEvents->attach(
    array('Foo', 'Bar', 'Baz'), // targets
    'doSomething', // named event
    $listener
);

// All targets via wildcard
$sharedEvents->attach(
    '*', // all targets
    'doSomething', // named event
    $listener
);

// Mix and match: multiple named events on multiple named targets:
$sharedEvents->attach(
    array('Foo', 'Bar', 'Baz'), // targets
    array('foo', 'bar', 'baz'), // events
    $listener
);

// Mix and match: all events on multiple named targets:
$sharedEvents->attach(
    array('Foo', 'Bar', 'Baz'), // targets
    '*', // events
    $listener
);

// Mix and match: multiple named events on all targets:
$sharedEvents->attach(
    '*', // targets
    array('foo', 'bar', 'baz'), // events
    $listener
);

// Mix and match: all events on all targets:
$sharedEvents->attach(
    '*', // targets
    '*', // events
    $listener
);

The ability to specify multiple targets and/or events when attaching can slim
down your code immensely.

Listener aggregates¶

Another approach to listening to multiple events is via a concept of listener
aggregates, represented by <tt class="docutils literal">Zend\EventManager\ListenerAggregateInterface</tt>.
Via this approach, a single class can listen to multiple events, attaching
one or more instance methods as listeners.

This interface defines two methods, <tt class="docutils literal">attach(EventManagerInterface $events)</tt>
and <tt class="docutils literal">detach(EventManagerInterface $events)</tt>.  Basically, you pass an
<tt class="docutils literal">EventManager</tt> instance to one and/or the other, and then it’s up to the
implementing class to determine what to do.

As an example:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

use Zend\EventManager\EventInterface;
use Zend\EventManager\EventManagerInterface;
use Zend\EventManager\ListenerAggregateInterface;
use Zend\Log\Logger;

class LogEvents implements ListenerAggregateInterface
{
    protected $listeners = array();
    protected $log;

    public function __construct(Logger $log)
    {
        $this->log = $log;
    }

    public function attach(EventManagerInterface $events)
    {
        $this->listeners[] = $events->attach('do', array($this, 'log'));
        $this->listeners[] = $events->attach('doSomethingElse', array($this, 'log'));
    }

    public function detach(EventCollection $events)
    {
        foreach ($this->listeners as $index => $listener) {
            if ($events->detach($listener)) {
                unset($this->listeners[$index];
            }
        }
    }

    public function log(EventInterface $e)
    {
        $event  = $e->getName();
        $params = $e->getParams();
        $this->log->info(sprintf('%s: %s', $event, json_encode($params)));
    }
}

You can attach this using either <tt class="docutils literal">attach()</tt> or <tt class="docutils literal">attachAggregate()</tt>:

$logListener = new LogEvents($logger);

$events->attachAggregate($logListener); // OR
$events->attach($logListener);

Any events the aggregate attaches to will then be notified when triggered.

Why bother? For a couple of reasons:

Aggregates allow you to have stateful listeners. The above example
demonstrates this via the composition of the logger; another example would be
tracking configuration options.

Aggregates make detaching listeners easier. When you call <tt class="docutils literal">attach()</tt>
normally, you receive a <tt class="docutils literal">Zend\Stdlib\CallbackHandler</tt> instance; the only way
to <tt class="docutils literal">detach()</tt> a listener is to pass that instance back – which means if you
want to detach later, you need to keep that instance somewhare. Aggregates
typically do this for you – as you can see in the example above.

Introspecting results¶

Sometimes you’ll want to know what your listeners returned. One thing to
remember is that you may have multiple listeners on the same event; the
interface for results must be consistent regardless of the number of listeners.

The <tt class="docutils literal">EventManager</tt> implementation by default returns a
<tt class="docutils literal">Zend\EventManager\ResponseCollection</tt> instance. This class extends PHP’s
<tt class="docutils literal">SplStack</tt>, allowing you to loop through responses in reverse order (since the
last one executed is likely the one you’re most interested in). It also
implements the following methods:

<tt class="docutils literal">first()</tt> will retrieve the first result received

<tt class="docutils literal">last()</tt> will retrieve the last result received

<tt class="docutils literal">contains($value)</tt> allows you to test all values to see if a given one was
received, and returns simply a boolean <tt class="docutils literal">true</tt> if found, and <tt class="docutils literal">false</tt> if not.

Typically, you should not worry about the return values from events, as the
object triggering the event shouldn’t really have much insight into what
listeners are attached. However, sometimes you may want to short-circuit
execution if interesting results are obtained.

Short-ciruiting listener execution¶

You may want to short-ciruit execution if a particular result is obtained, or if
a listener determines that something is wrong, or that it can return something
quicker than the target.

As examples, one rationale for adding an <tt class="docutils literal">EventManager</tt> is as a caching mechanism.
You can trigger one event early in the method, returning if a cache is found,
and trigger another event late in the method, seeding the cache.

The <tt class="docutils literal">EventManager</tt> component offers two ways to handle this. The first is to
pass a callback as the last argument to <tt class="docutils literal">trigger()</tt>; if that callback returns
a boolean <tt class="docutils literal">true</tt>, execution is halted.

Here’s an example:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17

public function someExpensiveCall($criteria1, $criteria2)
{
    $params  = compact('criteria1', 'criteria2');
    $results = $this->getEventManager()->trigger(
        __FUNCTION__,
        $this,
        $params,
        function ($r) {
            return ($r instanceof SomeResultClass);
        }
    );
    if ($results->stopped()) {
        return $results->last();
    }

    // ... do some work ...
}

With this paradigm, we know that the likely reason of execution halting is due
to the last result meeting the test callback criteria; as such, we simply return
that last result.

The other way to halt execution is within a listener, acting on the <tt class="docutils literal">Event</tt>
object it receives. In this case, the listener calls <tt class="docutils literal">stopPropagation(true)</tt>,
and the <tt class="docutils literal">EventManager</tt> will then return without notifying any additional
listeners.

1
2
3
4

$events->attach('do', function ($e) {
    $e->stopPropagation();
    return new SomeResultClass();
});

This, of course, raises some ambiguity when using the trigger paradigm, as you
can no longer be certain that the last result meets the criteria it’s searching
on. As such, we recommend that you standardize on one approach or the other.

Keeping it in order¶

On occasion, you may be concerned about the order in which listeners execute. As
an example, you may want to do any logging early, to ensure that if
short-circuiting occurs, you’ve logged; or if implementing a cache, you may want
to return early if a cache hit is found, and execute late when saving to a
cache.

Each of <tt class="docutils literal">EventManager::attach()</tt> and <tt class="docutils literal">SharedEentManager::attach()</tt> accept
one additional argument, a priority. By default, if this is omitted, listeners
get a priority of 1, and are executed in the order in which they are attached.
However, if you provide a priority value, you can influence order of execution.

Higher priority values execute earlier.

Lower (negative) priority values execute later.

To borrow an example from earlier:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12

$priority = 100;
$events->attach('Example', 'do', function($e) {
    $event  = $e->getName();
    $target = get_class($e->getTarget()); // "Example"
    $params = $e->getParams();
    printf(
        'Handled event "%s" on target "%s", with parameters %s',
        $event,
        $target,
        json_encode($params)
    );
}, $priority);

This would execute with high priority, meaning it would execute early. If we
changed <tt class="docutils literal">$priority</tt> to <tt class="docutils literal">-100</tt>, it would execute with low priority, executing
late.

While you can’t necessarily know all the listeners attached, chances are you can
make adequate guesses when necessary in order to set appropriate priority
values. We advise avoiding setting a priority value unless absolutely necessary.

Custom event objects¶

Hopefully some of you have been wondering, “where and when is the Event object
created”? In all of the examples above, it’s created based on the arguments
passed to <tt class="docutils literal">trigger()</tt> – the event name, target, and parameters. Sometimes,
however, you may want greater control over the object.

As an example, one thing that looks like a code smell is when you have code like
this:

1
2
3
4

$routeMatch = $e->getParam('route-match', false);
if (!$routeMatch) {
    // Oh noes! we cannot do our work! whatever shall we do?!?!?!
}

The problems with this are several. First, relying on string keys is going to
very quickly run into problems – typos when setting or retrieving the argument
can lead to hard to debug situations. Second, we now have a documentation issue;
how do we document expected arguments? how do we document what we’re shoving
into the event? Third, as a side effect, we can’t use IDE or editor hinting
support – string keys give these tools nothing to work with.

Similarly, consider how you might represent a computational result of a method
when triggering an event. As an example:

1
2
3
4
5
6
7
8
9

// in the method:
$params['__RESULT'] = $computedResult;
$events->trigger(__FUNCTION__ . '.post', $this, $params);

// in the listener:
$result = $e->getParam('__RESULT__');
if (!$result) {
    // Oh noes! we cannot do our work! whatever shall we do?!?!?!
}

Sure, that key may be unique, but it suffers from a lot of the same issues.

So, the solution is to create custom events. As an example, we have a custom
<tt class="docutils literal">MvcEvent</tt> in the ZF2 MVC layer. This event composes the application instance,
the router, the route match object, request and response objects, the view
model, and also a result. We end up with code like this in our listeners:

1
2
3
4
5
6

$response = $e->getResponse();
$result   = $e->getResult();
if (is_string($result)) {
    $content = $view->render('layout.phtml', array('content' => $result));
    $response->setContent($content);
}

But how do we use this custom event? Simple: <tt class="docutils literal">trigger()</tt> can accept an event
object instead of any of the event name, target, or params arguments.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18

$event = new CustomEvent();
$event->setSomeKey($value);

// Injected with event name and target:
$events->trigger('foo', $this, $event);

// Injected with event name:
$event->setTarget($this);
$events->trigger('foo', $event);

// Fully encapsulates all necessary properties:
$event->setName('foo');
$event->setTarget($this);
$events->trigger($event);

// Passing a callback following the event object works for
// short-circuiting, too.
$results = $events->trigger('foo', $this, $event, $callback);

This is a really powerful technique for domain-specific event systems, and
definitely worth experimenting with.

Putting it together: Implementing a simple caching system¶

In previous sections, I indicated that short-circuiting is a way to potentially
implement a caching solution. Let’s create a full example.

First, let’s define a method that could use caching. You’ll note that in most of
the examples, I’ve used <tt class="docutils literal">__FUNCTION__</tt> as the event name; this is a good practice,
as it makes it simple to create a macro for triggering events, as well as helps
to keep event names unique (as they’re usually within the context of the
triggering class). However, in the case of a caching example, this would lead to
identical events being triggered. As such, I recommend postfixing the event name
with semantic names: “do.pre”, “do.post”, “do.error”, etc. I’ll use that
convention in this example.

Additionally, you’ll notice that the <tt class="docutils literal">$params</tt> I pass to the event is usually the
list of parameters passed to the method. This is because those are often not
stored in the object, and also to ensure the listeners have the exact same
context as the calling method. But it raises an interesting problem in this
example: what name do we give the result of the method? One standard that has
emerged is the use of <tt class="docutils literal">__RESULT__</tt>, as double-underscored variables are
typically reserved for the sytem.

Here’s what the method will look like:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21

public function someExpensiveCall($criteria1, $criteria2)
{
    $params  = compact('criteria1', 'criteria2');
    $results = $this->getEventManager()->trigger(
        __FUNCTION__ . '.pre',
        $this,
        $params,
        function ($r) {
            return ($r instanceof SomeResultClass);
        }
    );
    if ($results->stopped()) {
        return $results->last();
    }

    // ... do some work ...

    $params['__RESULT__'] = $calculatedResult;
    $this->events()->trigger(__FUNCTION__ . '.post', $this, $params);
    return $calculatedResult;
}

Now, to provide some caching listeners. We’ll need to attach to each of the
“someExpensiveCall.pre” and “someExpensiveCall.post” methods. In the former
case, if a cache hit is detected, we return it, and move on. In the latter, we
store the value in the cache.

We’ll assume <tt class="docutils literal">$cache</tt> is defined, and follows the paradigms of <tt class="docutils literal">Zend\Cache</tt>. We’ll
want to return early if a hit is detected, and execute late when saving a cache
(in case the result is modified by another listener). As such, we’ll set the
“someExpensiveCall.pre” listener to execute with priority <tt class="docutils literal">100</tt>, and the
“someExpensiveCall.post” listener to execute with priority <tt class="docutils literal">-100</tt>.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

$events->attach('someExpensiveCall.pre', function($e) use ($cache) {
    $params = $e->getParams();
    $key    = md5(json_encode($params));
    $hit    = $cache->load($key);
    return $hit;
}, 100);

$events->attach('someExpensiveCall.post', function($e) use ($cache) {
    $params = $e->getParams();
    $result = $params['__RESULT__'];
    unset($params['__RESULT__']);
    $key    = md5(json_encode($params));
    $cache->save($result, $key);
}, -100);

Note

The above could have been done within a <tt class="docutils literal">ListenerAggregate</tt>, which would
have allowed keeping the <tt class="docutils literal">$cache</tt> instance as a stateful property, instead
of importing it into closures.

Another approach would be to move the body of the method to a listener as well,
which would allow using the priority system in order to implement caching. That
would look like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

public function setEventManager(EventManagerInterface $events)
{
    $this->events = $events;
    $events->setIdentifiers(array(__CLASS__, get_class($this)));
    $events->attach('someExpensiveCall', array($this, 'doSomeExpensiveCall'));
}

public function someExpensiveCall($criteria1, $criteria2)
{
    $params  = compact('criteria1', 'criteria2');
    $results = $this->getEventManager()->trigger(
        __FUNCTION__,
        $this,
        $params,
        function ($r) {
            return ($r instanceof SomeResultClass);
        }
    );
    return $results->last();
}

public function doSomeExpensiveCall($e)
{
    // ... do some work ...
    $e->setParam('__RESULT__', $calculatedResult);
    return $calculatedResult;
}

The listeners would then attach to the “someExpensiveCall” event, with the cache
lookup listener listening at high priority, and the cache storage listener
listening at low (negative) priority.

Sure, we could probably simply add caching to the object itself - but this
approach allows the same handlers to be attached to multiple events, or to
attach multiple listeners to the same events (e.g. an argument validator, a
logger and a cache manager). The point is that if you design your object with
events in mind, you can easily make it more flexible and extensible, without
requiring developers to actually extend it – they can simply attach listeners.

Conclusion¶

The <tt class="docutils literal">EventManager</tt> is a powerful component. It drives the workflow of the MVC
layer, and is used in countless components to provide hook points for developers
to manipulate the workflow. It can be put to any number of uses inside your own
code, and is an important part of your Zend Framework toolbox.

Table Of Contents

Using the EventManager

Terminology

Getting started

Shared managers

Wildcards

Listener aggregates

Introspecting results

Short-ciruiting listener execution

Keeping it in order

Custom event objects

Putting it together: Implementing a simple caching system

Conclusion

Previous topic

Unit Testing a Zend Framework 2 application

Next topic

Advanced Configuration Tricks

This Page

        Show Source

Edit Source

            Note: You need to stay logged into your GitHub account to contribute to the documentation.

Quick search

    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Go" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>

    Enter search terms or a module, class or function name.

Navigation

          index

          next |

          previous |

Zend Framework 2 2.3.0dev documentation »

        © Copyright 2013, Zend Technologies Ltd..
      Created using Sphinx 1.2b3.

Edit this document

        The source code of this file is hosted on GitHub. Everyone can
        update and fix errors in this document with few clicks -
        no downloads needed.

            Login with your GitHub account.

            Go to

                Using the EventManager
             on GitHub.

            Edit file contents using GitHub's text editor in your web browser

            Fill in the Commit message text box at the end of the page telling why
            you did the changes. Press Propose file change button next to it when done.

            On Send a pull request page you don't need to fill in text anymore. Just
            press Send pull request button.

            Your changes are now queued for review under project's Pull requests tab on GitHub.

redpajama_set_name: RedPajamaGithub


text:
Q: Form submitting wrong value from float input in ASP.NET MVC Today I stumbled across a problem with the number input in a hmtl Form. I'm trying to get an Input from the User in form of a float. For this case i use the Input tag as following (Sorry for the English/German names):
<input asp-for="TBE_Leitwert" type="number" step="0.1" class="form-control"  placeholder="Leitwert (mS)" />

Somehow after submitting the form I don't get the float value. It seems like the Input is ignoring the separator at all, Example:
The User puts in the value 1,1 but submitted was 11.
Value entered from a user:

Value from submitted the form:

The same problem results, even if I put the value 1.1 so it doesn't matter if I take the dot or comma, the value still is submitted wrong as 11
Is there any way to get the right float values from submitting the form without using JS or AJAX?
Edit:
I made a super minimal reproducible exampele.
Index Page:
@model TestModel
@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
    <form asp-controller="Home" asp-action="GetValue">
        <input asp-for="WantedValue" type="number" step="0.1" />
        <button type="submit">Test</button>
    </form>
</div>

HomeController just added this 1 function:
public IActionResult GetValue(TestModel test)
{
    return RedirectToAction("Index");
}

Model:
public class TestModel
{
    public double WantedValue { get; set; }
}

it is still the same, if i enter a float value on the index:
Value entered by User on Index
the Controller still gets a wrong value:
Wrong Value received from Form
since i entered "1,1" on the Index site i was expecting to get the value "1,1" in the controller. Same with the Value "1.1"

A: You might need to set globalization culture in your project.
In asp.net core, add it in Startup.Configure:
var cultures = new[]
{
 new CultureInfo("en-US"),
 new CultureInfo("de"),
};

app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("en-US"),
    SupportedCultures = cultures,
    SupportedUICultures = cultures
});

A: I know it's not the right way to solve the problem but it works.
Try to use input type text instead of number like:
<input type="text" />

And then in the controller convert it to double in this way:
var number = collection["Number"];
var numberr = double.Parse(number.Replace('.', ','));

I hope this help you.


By its fourth episode, Jamestown Season 2 appears to have fully hit its stride, getting back to the basics that make this show so enjoyable. Not only do the women all have new storylines in the works, the bulk of the episode revolves around relationships, making it deliciously soapy in every direction. There's tragedy, forbidden romance, blackmail, at least one new forced marriage, and two guys fighting each other in a field with garden hoes. You can't ask for much more from this show.
The arrival of a new ship in port means that some more Jamestown men are supposed to become husbands, as it has another shipment of marriageable women on board. One of them is blacksmith James Read, who's actually adorably excited to promise himself for life to someone he's never met before. Her name is Carina, and James is all sorts of nervous about her arrival, or at least he is until Verity and Meredith step in to give him romantic advice and help him spruce up his appearance, complete with a shave, a washcloth and a brand new fancy red doublet from the secret stash of stolen goods.
It's a bit odd that Verity and Meredith are used here as an example of Jamestown marital bliss, but I guess they're the best the town has to offer considering that Alice's intended raped her before she married his brother, and Jocelyn's husband was murdered. Yay, Rutter household! Alas, it turns out that James' intended died on the crossing from England, a mere day from shore. The blacksmith is brokenhearted over her loss, as he'd kind of fallen in love with the idea of having a teammate as much as anything else, someone who was, I suppose, required, to love – or at least like him – even once knowing all his flaws.
Jocelyn, already struggling with Yeradley's insistence that she spy on her pseudo-boyfriend Dr. Christopher, decides to comfort James Read in his grief by…sleeping with him in a barn? On the face of things, Joss' fascination with the blacksmith is understandable – in stories like this women always want men they can't have – but given that she was equally just as into Christopher last season, it's hard to pinpoint exactly when her feelings changed. Or if they even did, because what she seems to feel now is a lot of regret. After telling Read that he has to promise not to love her, she panics that someone will realize that they two spent the night together. (Since James Read, champion romantic, left her asleep in the barn by herself and the magistrate saw her there.) Apparently even though they're in Jamestown, where everyone struggles, class hierarches have to be maintained and a common blacksmith is beneath Jocelyn's dignity. Christopher, for his part, kisses Joss and says he wants to marry her, but then cries over how guilty he feels because he can now have his best friends wife, only because said best friend is dead. Really, girl, you can just be a widow for a while.
Marriage is apparently in the air this week, as Henry Sharrow ties the knot with Pamunkey woman Winganuske. Or maybe he does. They have a native ceremony, but I'm not sure how binding that is in Jamestown, particularly given Temperance Yeardley's sudden insistence that what they should be really doing is saving the Pamunkeys' souls. As for the woman herself, she seems remarkably fine with marrying into a camp of people who distrust and dislike her, encouraging Henry to bed her and insisting that as "senior wife" she gets to boss Alice around.
Instead, it's Henry who seems to have trouble with his new native "family" connection, as he gets so annoyed by Chacrow and his friends laughing at him that he…agrees to spy on and manipulate his wife's family for Governor Yeardley? Y'all. They gave him a dumb nickname, which hardly seems that problematic, especially when they literally nursed him back to health like a year ago? Ugh, Henry is the worst.
Luckily, I'm not the only one that thinks so, as Silas rats out his brother and Governor Yeardley's plan to load down the native tribe with loans and then…have them owe them money? This plan isn't entirely of the sense-making variety to me, as it rides a lot on the idea that a group of people the settlers have been repeatedly terrible toward having enough honor to want to pay a debt they owe to them. But, I suppose if you view it as an excuse to attack them at the first opportunity it works? Anyway, joke's on Yeardley because after Silas gives Chacrow a heads up, the natives turn around and offer up their own gift of labor to make everything between the groups square. Henry responds in his typical mature fashion when Silas confesses what he did, and the two men engage in a crazy fistfight among their tobacco crop. This show is just the best sometimes.


text:
Chevron set to acquire Noble Energy in $5billion deal
An entrance sign at the Chevron refinery, located near the Houston Ship Channel, is seen in Pasadena, Texas, U.S.
Chevron Corp said on Monday it would buy oil and gas producer Noble Energy Inc for about $5 billion in stock, the first big energy deal since the coronavirus crisis crushed global fuel demand and sent crude prices to historic lows.
The oil price crash has decimated shares of many energy companies, making them attractive targets for those that have weathered the downturn and have the resources to buy. Chevron ended the first quarter with a cash pile of $8.5 billion after withdrawing a $33 billion bid for Anadarko last year and then being among the first big oil companies to slash spending during the downturn.
The purchase boosts Chevron's investments in U.S. shale, and gives it Noble's flagship Leviathan field off the shore of Israel, the largest natural gas field in the eastern Mediterranean.
The deal makes Chevron the first oil major to enter Israel. Chief Executive Officer Mike Wirth said "We certainly are mindful of the fact that there are political differences and tensions" between Israel and neighbors where Chevron also has business including Saudi Arabia, Kuwait, Qatar and the Kurdish region of Iraq.
He said Chevron was "apolitical" and "a commercial actor" in the region. "We engage with all of our different stakeholders as we go through something like this," Wirth said, declining to detail the timing of discussions with partner governments.
Israel's Energy Minister Yuval Steinitz called the deal "a tremendous expression of confidence in the Israeli energy market."
The Israeli assets "will rebalance the portfolio towards gas and provide a springboard" in the region, said Tom Ellacott, senior vice president at Wood Mackenzie.
The Homer Ferrington gas drilling rig, operated by Noble Energy and drilling in an offshore block on concession from the Cypriot government, is seen during President Demetris Christofias' visit in the east Mediterranean, Nicosia.
Oil companies are under pressure to reduce their carbon footprint. Gas is seen as a cleaner burning fuel.
Last year, Chevron dropped its offer for Anadarko when Occidental Petroleum Corp bid more. Noble "offers an unique combination of shale as well long-cycle assets," much as Anadarko would have, said Jennifer Rowland, analyst with Edward Jones, adding that she thought the deal was unlikely to spark a wave of consolidation.
A bidding war for Noble was unlikely, said Pavel Molchanov, analyst with Raymond James. He noted the smaller scale of this deal – $5 billion versus the $33 billion Chevron had offered for Anadarko. He said other "prospective buyers would find it easier to replicate via other means."
The acquisition will give Chevron a bigger presence in the shale patches of Colorado as well as the Permian Basin, the top U.S. shale field. Chevron has been expanding there, and was under pressure to show how it planned to expand output when existing Permian assets are depleted.
Last year's bid for Anadarko was an attempt to boost Permian production, but Chevron instead pocketed a $1 billion break fee.
Since then, margins and drilling have been decimated by the coronavirus crisis. Prices have rebounded to around $40 a barrel from an average of around $20 in April, yet they remain depressed and have weighed on energy company valuations. Just seven months ago, Noble had a market capitalization of about $12 billion compared to $4.63 billion on Friday.
Shares of Noble closed up 5.4% to $10.18, after falling more than 60% this year through Friday's close. Chevron fell 2.2% to $85.27.
The offer values Noble at $10.38 a share, a 7.5% premium to its Friday close. Including the company's debt pile, the deal is worth roughly $13 billion.
Chevron is paying a "moderate premium" reflecting a cautious outlook for oil and gas deals, said Andrew Dittmar, senior M&A analyst at data provider Enverus.
Noble shareholders will own about 3% of the combined company, after the deal closes, expected in the fourth quarter.
The deal will help save about $300 million on an annual run-rate basis and add to free cash flow and earnings one year after closing, if global oil prices LCOc1 stay at $40, Chevron said.
It would add about 18% to Chevron's proved reserves. Noble had proved reserves of 2.05 billion barrels of oil and gas, while Chevron reported 11.4 billion.
July 21, 2020 July 21, 2020 247newsupdateAmerica, Asia, BusinessChevron Corporation, Chevron Noble Energy acquisition, Noble Energy Inc.
Previous Post Passengers taken hostage as armed man hijack bus in western Ukraine
Next Post U.S. offers reward for information that could lead to arrest of Venezuela chief justice


How much does Florida adoption home study cost?
A home study in Florida typically costs between $800.00-$2000.00. Some agencies include the home study in their agency fee so it is important to ask about this when signing with an adoption agency.


Stuck in Manila this Holy Week but raring to go out for a breath of fresh air?
Devotees flock to Kamay Ni Hesus for its 50-foot Ascending Christ statue which crowns a small hill teeming with greenery. You have to climb over 300 steps to get to it, and you can pray at the Stations of the Cross and the life-sized statues of religious icons on your short trek. The young ones (and the young at heart) will also enjoy the Bible-themed structures such as Noah's Ark and the Sea of Galilee koi pond.
Kamay Ni Hesus is located at Brgy. Tinamnan, Lucban, Quezon. It's open daily from 6:00 a.m. to 6:00 p.m.
Regina Rica (which stands for Rosarii Institute for Contemplation in Asia) is a 13.5-hectare pilgrimage site nestled in Tanay's rolling hills, with the pristine landscape serving as the perfect backdrop for its 30-foot Virgin Mary statue. Aside from climbing the trail to reach the statue, you can also pray at the Way of the Cross and the Labyrinth Walk, and meditate at the S Trail.
Regina Rica is located along Marcos Highway, Sitio Aguho Sampaloc, Tanay, Rizal. It's open from Wednesday to Monday from 8:00 a.m. to 5:00 p.m.
Avid mountain bikers should check out Camp Sinai, which houses what used to be a record holder for the largest 10 Commandments tablets replica in the world. The commandments here have since been surpassed by a larger replica in Dominican Hill, Baguio City, but it's still a pretty amazing sight. Sit on one of the benches in the area, stretch your legs, and enjoy the view.
Ten Commandments Shrine is lcoated at Camp Sinai, Pintong Bukawe, San Mateo, Rizal. Entrance fees are P30 for children, P50 for adults, and P40 for senior citizens, students, and PWDs.
The peak of Mt. Humarap in Paete, Laguna, which you can reach after an hour-long trek, houses three crosses, where you can pray while admiring panoramic views of the town of Paete and of Laguna Bay. If you want to feel more blessed, you can also take a refreshing dip at Matabungka Falls or visit some of the many old churches Laguna is famous for such as the Saint James the Apostle Parish, which is located in the heart of Paete.
Tatlong Krus is located at the peak of Mt. Humarap, Paete, Laguna. No entrance fee.
After Tatlong Krus, you can also head to Tayak Hill in the town of Rizal, Laguna for more cross sightings. The summit of Tayak Hill, which you can reach after a 30-minute climb, has a wooden cross and a concrete one, both of which you can see from afar. You can't help but thank the Lord while taking in the beautiful views at the peak!
Tayak Hill is located in Brgy. Tala, Rizal, Laguna. No entrance fee.
The Marian Orchard is a five-hectare park filled with verdant trees and colorful flowers. There's a small tower with a Christ the Redeemer statue, as well as life-sized statues of saints, a chapel, and smaller shrines dedicated to the Virgin Mary and Saint Joseph. The Hermitage of Our Mother, meanwhile, is a retreat site which houses small chapels for praying, as well as a wishing banga.
Marian Orchard is located at Brgy. Malabanan, Balete, Batangas. Entrance fee is at P25 per person.
Enjoy the serenity nature provides at Banal Na Bunduk Dalan Ning Krus (Holy Mountain Way of the Cross) in Mt. Arayat, Pampanga, which has life-sized statues depicting the Stations of the Cross. You can choose to just do the stations of the cross, but you can literally go the extra mile (you know, if you feel like you need to atone some more) by hiking all the way to the mountain's peak.
Banal Na Bunduk Dalan Ning Krus is located at the foot of Mt. Arayat, Brgy. Bano, Arayat, Pampanga. There is a P25 entrance fee.


text:
What's the most played video game in the u. s.?
William MacLeod
What's the most played video game in twenty twenty?
Video Games • 1 Answer
What's the most played video game of twenty twenty?
What's the least played video game in the world?
What's the most downloaded video game?
What's the most played game in roblox?
Video Games • 2 Answers


GNITE Blockchain Testing ,Techniques and Tools for testing the Machine Learning etc.
Book your tickets now !!
One lucky member of the INKher community will be selected to get the pass at INR 2,000 + GST. Others get the pass at INR 3,000 + GST.


More miscellaneous thoughts while I still don't have time to read, much less reply to, anybody's responses. Maybe Sunday. The hotel has actual keys -- not card keys, but real physical keys. I knew I should have brought a keychain, even if they look silly with just the one key on them. They look sillier with none, though.
I saw my first actual real-life California Highway Patrol folks, too. Yes, I watched a lot of CHiPs when I was young. I haven't tried watching it since I turned ten, and suspect I really shouldn't. I might wreck happy memories of even the dopey episodes, like the one with the flying saucers. But I liked the association.
Forgot to mention I struck up a conversation with someone at the airport for no better reason than overhearing he was going to the same hotel I was. It turned out he wasn't; there are two hotels with almost the same name, from the same management, across the highway from one another, and he was at the other. This served to confuse me as I was only vaguely aware which hotel I was going to. Other people did the arrangements. But -- this is neat -- he was coming from the University of Colorado, and we determined that he may well have met riddoch at some point, probably at a faculty party. As is required in this sort of thing, I didn't catch his name. But that's fair enough; he didn't catch mine. We're hoping to meet up again sometime this week.
Trivia: Mary Cassatt's scheduled debut at the Impressionist salon of 1878 was lost when the salon was cancelled, to avoid competition with the Exposition Universelle. Source: Mary Cassatt, Nancy Mowll Mathews.
Currently Reading: The Stars My Destination, Alfred Bester.


Once you know what symptoms to LOOK out for, consider cancer tests that allow us to detect cancers that do not have external, easy to see symptoms. A handy resource that follows is a table of cancer testing guidelines recommended for adults by age. Have you had these testings done within the past recommended number of years? If not, they may help catch things early when treatment is so highly successful. For even more detail, link to the related article listed below. And in another study specifically about colon rectal canceer (CRC), read about the mortality findings when screenings are not done or followed up properly, but don't limit that thinking just to CRC since it probably applies to screenings overall (see article below). Are you up to date on those routine recommended screenings?
Note: more videos wil be added soon that specifically address this topic of DIAGNOSIS.


You can choose the modules and even the number of columns to display on each admin page of your WordPress site. To do this, click the Screen Options tab in the upper right of the screen.
The Screen Options pane will slide down to reveal specific options for the page you are on. Select the checkboxes to display the related modules on the screen.
The available Screen Options differ from screen to screen. For example, the available options on the Dashboard screen differ from the ones on the Add New / Edit screens (below). Hint: By default, Excerpts, Discussion and other options boxes are not displayed on the Add New or Edit Post screen.
On post listings screens, the Screen Options will allow you to display more posts per screen or to hide columns that you don't want to see. Tip: Hide the SEO columns added by the WordPress SEO plugin if they are squeezing out the other columns.


Have A Question For Private Investigators Guildford About A Private Investigator in Guildford, Surrey?
Looking for a private detective team within Guildford, especially for first-timers, may raise several inquiries and concerns which require filing to be answered and Private Investigators Guildford from Guildford would be happy To speak with these.
Private Investigators Guildford located in Guildford has been in the private investigation business for many years and has extensive training and background to respond any question you could've about private investigation services in Guildford.
Highly successful adultery inquiries have been regularly performed by Private Investigators Guildford private detectives in and around Private Investigators Guildford and the UK for various individuals with different requirements.
Inside Guildford, you would not think that you may be a victim of a robbery or even be accused of committing one which is more nerve-racking.
Tracing a missing person who could be a relative you have lost touch with over the last few years in Guildford or a friend who you have lent money to only to discover they have disappeared from Surrey may not be a task you can be able to contain successfully by yourself.
In Guildford, Private Investigators Guildford offers services in order to allow you to carry out Due Diligence before investing into a business with an individual or even finding out if the reason for absence of a worker is accurate or not.
Private Investigators Guildford is a corporation for private detectives who are previously in the private investigation field for over 25 years efficiently by providing clients in Guildford with secret and hidden private detective services.


text:
How we serve vets
Dental Program
Wingman Program
Share your service
Be a Wingman
Donate to E4V
Shop E4V Swag
#MissionAccomplished
#MissionAccomplished: Dr. Khan treats Navy veteran Nick and his wife
Dr. Moona Khan of South Sound Dental Care in Tacoma, Washington provided Navy veteran Nick and his wife Shannah free dental care.
Nick was deployed to Afghanistan and Iraq and worked in Logistics, which meant he was part of a team that assessed whether bases needed to be shut down. Re-integrating back to society has been challenging but is getting better with treatment at the VA and Shannah's support. Nick graduated from the University of Maryland and is working now.
Exercise is what he enjoys and he and Shannah have 4 children! We wish them the best!
Sign up to provide dental care: https://www.everyoneforveterans.org/dentists.html
#MissionAccomplished: Army veteran, Noemi, gets advice & a new mattress
We are thankful to Wingman volunteer Megan for assisting Noemi, an army veteran who served in Iraq as a combat medic. Noemi needed a new mattress because hers was damaged. Instead of buying Noemi a new mattress, Megan looked into other options and counseled Noemi on how to contact the store and ask for a replacement mattress. After calling the store, Noemi received a free replacement mattress!!
Sometimes all it takes to assist a veteran is an outside perspective to provide opinions and advice to solve the problem.
Sign up to be a Wingman: https://www.everyoneforveterans.org/be-a-wingman.html
#MissionAccomplished: Back-to-school clothes for Deanna's kids
Thank you Valerie for bringing together your friends and church community to provide Deanna's children with back-to-school clothes.
Deanna served in the army in Afghanistan and loves fishing and camping with her kids.
The Wingman Program connects veterans to people in the community to support their needs. You can make a positive change in the community and give back to our combat veterans by becoming a Wingman volunteer.
#MissionAccomplished: 92-year-old veteran, Raymond, has a new smile
Thank you University of Iowa College of Dentistry for providing Raymond, a 92-year-old combat veteran, with free dental care. Raymond was an Infantryman deployed to the frontlines of Korea.
After not having a dental cleaning for 20 years, Raymond was able to get partial upper and lower dentures. He can now eat whatever he wants and smiles confidently!
#MissionAccomplished: Mask up!
Thank you Sue, Eriana, and friends for reaching out and offering to make masks for our veterans! Over 200 masks have been delivered to veterans around the nation.
"It was a very rewarding project. Thank you for helping us make this happen!" -Sue
This is a great example of how E4V connects the community with our veterans to support them when in need, especially in the midst of the COVID-19 pandemic.
#MissionAccomplished: Navy veteran, Morgan, living her dream making music
Meet Morgan! She served in the Navy in Afghanistan and though her passion has always been art, she pushed it away, never feeling comfortable with her true self.
Thank you Peter and Spencer for helping Morgan pursue her dream of producing music. Peter is showing Morgan how to edit and record music on a computer, and Spencer is providing Morgan producing advice. Because of their help, Morgan is more confident about embracing her artistic talent and has started to write poetry and play the guitar.
"Accepting free help is strange at first but this experience has shown me sometimes people are just really kind and generous with no strings attached." - Morgan
The Wingman Program connects veterans to people in the community to support their needs. Do you want to make a positive impact in your community by helping a combat veteran?
★ Serve as a Wingman at: https://www.everyoneforveterans.org/be-a-wingman.html
★ Veterans sign up at: https://www.everyoneforveterans.org/how-we-serve-vets.html
#MissionAccomplished: Iraq veteran, Johnathan, gets confidence restored
Jonathan was deployed to Iraq three times, with a range of duties from Guard duty to foodservice. Initially, he had a tough time coming back from Iraq which led him to suddenly change his career path. Pursuing acting, Jonathan recently completed school at the Theater and Film Conservatory for acting. However, the trials of deployment are never far off. Jonathan is grateful for a good friend from Iraq that he talks to every day.
Dr. Dodds was able to help him regain his confidence with his smile. Thank you, Dr. Dodds, for supporting combat veterans!
Be like Dr. Dodds and help veterans smile again. Dentists can sign up here:
https://www.everyoneforveterans.org/dentists.html
Everyone can donate to keep veterans smiling here:
https://donorbox.org/everyone-for-veterans
#MissionAccomplished: Dr. Meyer gives back to Bryant and his kids
Bryant was deployed to Afghanistan as an Automotive Diesel Technician. Returning stateside, he still has challenges with PTSD and reintegration within society. Bryant has an automotive mechanic job. He liked to target shoot for fun and wanted to take on 4-wheeling, but had to sell both the 4-wheeler and his gun in order to "put food on the table." Now, his kids are his "hobby".
"Because I didn't take care of myself due to everything I went through I have expressed to my kids how bad it can get if they do not brush their teeth." They all got new toothbrushes and toothpaste and they brush 2 to 3 times a day.
Dr. Lindsey Meyer (Monticello, IA) with Operation Enduring Freedom veteran, Bryant.
Be like Dr. Lindsey Meyer and help veterans smile again. Dentists can sign up here: https://www.everyoneforveterans.org/dentists.html,
Everyone can donate to keep veterans smiling, https://donorbox.org/everyone-for-veterans
#MissionAccomplished: Vietnam veteran, Rick, checks in with Dr. Chan
Dr. Jennifer Chan and dental assistant, Justina of Lakeview Dental Clinic (Lake Stevens, Wa) was able to help out Vietnam Veteran, Rick Irish (Sultan, Wa).
Rick was deployed to Vietnam where he was part of Special Handling, loading and unloading different classes of explosives in airplanes. Returning stateside, he was not aware of PTSD, though he had lots of flashbacks that lessened through the years. Those difficulties meant going through 3 marriages. He worked an array of jobs from logging, carpentry, construction, etc. He retired at 51 y/o due to back issues and is hard of hearing. Presently, he enjoys metal detecting in the woods.
Be like Dr. Jennifer Chan and help veterans smile again. Dentists can sign up here: https://www.everyoneforveterans.org/dentists.html,
#MissionAccomplished: A new reason to smile for Vietnam veteran, James
Dr. Tim Marker of Mt. Vernon, WA, is happy to be able to help out Vietnam war Veteran, James P. James did 2 tours in Vietnam. Through all the struggles with transitioning back to civilian life, James worked as a gardener, greenskeeper and street sweeper for most of his life. James is pleased to be back in WA state and living with his brother. Getting treatment at the VA for his PTSD has been very helpful. James enjoys smiling with his new dentures.
Be like Dr. Tim Marker and help veterans smile again.
Mission Accomplished Mondays will be off for the summer break and will resume in the fall. Thank you!
The goal of our blog is to keep everyone updated on what Everyone for Veterans has been working on.
Currently, our intern, Maddee, is working on a mission to find more dentists to connect to combat veterans. If you know of any dentists who want to give back, please contact us at
dental@everyoneforveterans.org!