text:
The mission is dead: long live the operational design!
Por RODRIGO PELAYO GONZÁLEZ
Versión en Español Disponible
Fecha de publicación: 19/11/2020. Visto 173 veces.
The Chilean National Doctrine for Joint Planning, developed from foreign doctrines, considers the process of operational design, integrated to the operational planning, but in a way in which the moment of its application is not clearly defined and, in the long run, generates a duplicity of effort and confuses planners. The differences between operational and tactical planning, forces to rethink which is the best methodology to determine the problem and find the solution. In this respect, there is a lot to be discussed.
Naval operations planning during the twentieth century, at least from a didactic perspective, consisted of the reception of a directive from the superior level, identifying in it what that superior had to achieve (its purpose), determining the essential tasks that the recipient of the directive had to comply to contribute to that purpose, and join both -task and purpose- in a structure that summarized in a few lines the commander's problem: the mission.
At the beginning of this century, planning theorists realized that the mission in itself was insufficient to guide the courses of action that went beyond the fulfillment of tasks. Neither did they encompassed conditions for completion, or desired end state, that would ensure the success of the campaign, not only at the operational level, but also contributing to the success at the strategic and political levels.
The connection between the objectives of the different planning levels became fundamental, to the point of making it unthinkable that actions executed at the tactical level were planned with no other purpose than to contribute to the achievement of the strategic objectives. The operational level was born. This level, located between strategy and tactics, acts as an integrator, coordinator, and synchronizer of what the forces must achieve at the tactical level, structured in the form of operations and campaigns, and the fulfillment of the strategic objective.
The term "objectives," understood as goals to be achieved, began to appear more than "tasks" and "purposes". The operational environment multiplied its complexity and dimensions, incorporating a more in-depth analysis of military, political, social, economic, cultural, and informational aspects, among others. Concepts such as center of gravity, decisive conditions and lines of operations appeared. The old and seemingly simple Operations Planning Process (OPP) was never the same.
This essay intends to postulate that, at the operational level, the planning process elaborated using the Operational Design (OD) methodology, eliminates the need to elaborate a guiding mission from the planning. Moreover, the arguments will show that OD, as a methodology aimed at framing the problem and elaborating a conceptual solution to that problem, replaces the whole orientation or analysis stage of the OPP mission and even part of the development stage of the concept or courses of action (COA).
Considering the aforementioned, the meanings of art, design, and operational approach will be reviewed, according to how they are understood by the national joint doctrine and how these concepts differ from doctrines of armed forces with more experience in the battlefields; Further on, OD will be explained as a methodology for solving military problems at the operational level; Later, the steps of the OD will be correlated to the steps of the OPP, indicating the duplicity of processes that implies to use both processes simultaneously. Finally concluding that OD is better applicable at the operational level and of external form to the OPP, than in all the levels of planning and of integrated or simultaneous form, thereby eliminating the need to elaborate a mission.
Art, design, and operational approach are not the same
In the Chilean MoD publication "Doctrine for planning joint operations", the introduction of operational art is defined as a "process that translates strategy into action" (Chile, 2014). This introduction is the first obstacle for planners to help understand the true dimension of what it covers.
A more comprehensive definition is covered in the MoD publication "Doctrine for Joint Operations" which defines it as; "the cognitive approach of commanders and advisors -with the support of their skills, knowledge, experience, creativity, and judgment, to develop strategies, campaigns and operations, and organize and employ military forces, integrating goals, methods, and means (MDN, undated). The concepts of approach and process are totally different things.
This planning doctrine refers to Operational Design as;
"…the description that a commander makes of the general provisions to be taken by his forces to achieve the desired military end state. It is the commander´s visualization of how the operation should transform the current conditions into the desired end state; the way the commander wants the operational environment to look like at the end of the operations". (MDN, 2014).
A careful reading allows one to realize that this definition is not referring to the OD methodology, but rather to its result, the operational approach. This is a second relevant error, since it contributes to many planners referring indistinctly to design and approach, without understanding that the latter is the product of the former.
In this regard, the US joint planning doctrine correctly defines OD as a methodology designed to understand the situation and the problem; "operational design supports operational art with a general methodology using elements of operational design for understanding the situation and the problem" (USA, 2011). This is consistent with the current implementation in our OPP, where we incorporate the design methodology in the orientation phase (mission analysis) as an additional tool for the commander to achieve the deepest possible understanding of the problem he will face.
But what the Chilean planning doctrine omits when defining Operational Design (OD), is that delimiting the problem is not the final product of this methodology, but a previous step to the elaboration of a conceptual solution of this problem, in the form of an operational approach that gathers and orders, in time, space, and purpose, all the conclusions obtained in the previous steps.
Relying on conventional elements of art and design, within which the main ones are; the Desired End State (DES), the strategic and operational objectives, the Center of Gravity (COG), the Decisive Conditions (DC) and the Lines of Operation (LOO) from which DC occur. The United States doctrine clarifies this as; "the methodology helps the JFC and staff to understand conceptually the broad solutions for attaining mission accomplishment and to reduce the uncertainty of a complex operational environment" (USA JP 5-0, 2011).
OD as a methodology
As suggested at the beginning of this essay, the increasing complexity of military problems faced by an operational commander, made it necessary to seek methodological tools other than OPP.
In the related literature, it is possible to find various classifications for the types of military problems; however, in Western military doctrines, two general types are employed: well-structured and ill-structured (Hartig, 2005).
A well-structured problem is one in which the starting point, or initial situation are clearly defined and delimited, its goal is clear, and the possible solutions are verifiable and measurable. The solution to these types of problems was what last century´s commanders had to plan, when operational level was not yet the lead character in major operations or campaigns. Many writings associate these types of problems to tactical missions, with well-defined tasks and purposes and a wide range of possible courses of action for its compliance. But keep in mind: a well-structured problem does not imply that it is not extremely complex to solve, only that is associated with closed systems that can be solved by linear and analytic processes.
On the contrary, ill-structured problems are associated with open systems in which rational processes like OPP are insufficient. These have diffused and unclear goals, contradictory and incomplete requirements and information, whose partial solutions can generate new problems and for which possible solutions or courses of action (COA) are far from being numerous or perfect. These types of problems, with more complex and varied elements than just military, puts commanders and their planning staff in a difficult situation to understand its purposes and forms. Nowadays these problems are associated with operational level planning and gave birth to OD as a solution methodology.
The joint doctrine of the armed forces, which are at the forefront in terms of planning process, mainly because of their experience in world conflicts, distinguish OD as a methodology that follows four steps that can be summarized as; 1) Understand the superior (in terms of desired end state, objectives, limitations, and other guiding aspects); 2) Understand how the operational environment is composed and how it impacts the achievement of the objectives (conclusions regarding the operational factors space, time, force, and information present in all possible dimensions of a theater of operations); 3) Determine the problem (those aspects of the adversary and the operational environment that prevent or make it difficult to move from the current condition to the desired end state, and 4) Develop an operational approach that visualizes, in graphic and narrative terms, the commander's conceptual solution. (USA JP 5-0, 2011)
Fig. 1: Operational Design Framework (2017 2014, p. IV-7)
At the operational level, where OD is best applied, the strategic level sets the campaign's strategic objective and, immediately, this objective generates the creation of a theater of operations and the commander in charge. The operational commander then analyses and concludes whether a large operation is sufficient to achieve this strategic objective or a whole campaign will have to be designed. A campaign, defined as more than one major operation that, in a sequential or parallel, coordinated, synchronized, and integrated way, will reach the strategic objective. This strategic objective, which guides all operations of the campaign, is nothing more than the purpose of the commander; the "why" of the whole campaign. The major operations, on the other hand, are going to generate the operational or intermediate objectives that lead to the strategic or ultimate objective, which become the essential tasks to achieve the purpose, making a simile with the orientation stage of the OPP. With the strategic and operational objectives, we already have the "what" and the "for what"; we no longer need to develop a mission analysis stage.
Lines of Operation (LOO) and Decisive Conditions (DC) envisioned after a rigorous systemic analysis of factors; force, space, time, and information, becomes a "how". In broad terms, the commander thinks he must achieve the strategic objective and, therefore, they become limitations to creativity of detailed planning that formerly use to be emphasized in the way of thinking in many courses of action.
The LOO and CD, visualized after a rigorous systemic analysis of force, space, time and information factors, become a "how", in broad terms, the commander thinks he must achieve the strategic objective and, therefore, limiting the creativity of the detailed planning that used to be emphasized in the way of thinking in many courses of action. Operational approach can be understood as the framework of the definitive course of action, in the absence of detailing the effects that will comply with the decisive conditions, specific moment of analysis of alternatives. The above is consistent with what the department of Joint Military Operations of the Naval War College states;
"the design approach, therefore, does not recognize the need (or desire) for multiple courses of action. Nor does it recognize the formal process of analysis and comparison because those activities are accomplished through the discussion and framing of the problem" (NWC, 2019)
OD and OPP; something doesn´t fit
The U.S. Joint Planning Doctrine acknowledges that the OD and PPO are complementary, not integrated, elements for solving complex military problems; "operational design (OD) and joint operational planning process (JOPP) are complementary elements of the overall planning process" (USA, 2011). The US Navy´s doctrine of naval operations planning views OPP as an optional methodology, applied before or in conjunction with mission analysis:
"the NPP views design as an optional methodology that may be used in concert with operational art prior to and in conjunction with mission analysis in order to assist the commander and staff when faced with an unfamiliar or complex and ill-structured situation" (Navy, 2013).
The US Naval War College, in its academic syllabus at the operational level, suggests that, in the face of ill-structured problems, OD applies better than OPP, implying the independence of both processes: "for such complex adaptive systems and/or ill-structured problems, the design approach is preferred" (NWC, 2019).
The OPP as a military problem-solving methodology is independent of the OD. It begins with the orientation stage, the purpose of which is; "to determine what must be done to satisfy the indications disposed by the superior" (MDN, 2014); that is, the "what" and the "why" (purpose), and has as its main product, the commander's mission. In the description of the steps of this stage, elements of the OD are interspersed without mentioning how they are obtained or where they come from, along with sub-processes that, expressed in other terms, do not differ in any way from the steps of the OD. Understanding the superior is now called "review of the directives and orientations of the superior" plus "task analysis"; understanding the operational environment changes to "review of the situation and analysis of key factors"; and identify the problem, along with developing the operational approach, are summarized in the development of a mission to guide the subsequent development of courses of action (COA).
Why then, even though the doctrines we use as references to elaborate our own recognize these two processes as alternatives, in the Chilean armed forces we have so much difficulty in separating them? In the author's opinion, the initial incorporation of the concepts of operational art, design, and approach to the educational and practical processes could have been rushed and without the full understanding of what they meant and how they paired with OPP, added to the fact that our doctrine updates have been kept at an unsatisfactory level.
The inconsistency is such that DNC 5-0 incorporates OD as a subsequent step to having established the mission, which is completely illogical because if you already have the "what to do" and "for what" purpose, after a thoroughly analysis of the operational environment, then, repeating the processes, makes no sense. Apart from that, just reviewing publications and graphic operational approaches from various foreign (including domestic) military organizations is sufficient to confirm that, within the elements represented, the mission is not one of them, since the desired end state and the objectives are more than enough to disclose the "what" and the "why."
Fig. 2: Fig. 2 Operational design timing according to joint national doctrine (source DNC 5-0)
Our academic processes show that by planning simultaneously with OD and OPP, it often happens that the operational approach is then inconsistent with the course of action developed, since planners carry out OPP sub-processes that are meant to solve a mission, not an approach. Without going any further, the validity test refers to; "if executed in the described manner and the phases are fulfilled in the order and time intended, the COA will succeed in fulfilling the mission?" (MDN, 2014), whereas leading international doctrines validate the operational approach as "can accomplish the mission within the commander's guidance". (USA, 2011)
It is valid then to ask us; If for the operational level, OD products are a clear determination of the problem and a conceptual solution to that problem; What is the need for the orientation stage (mission analysis) of the OPP?; If the operational approach results in a conceptual solution, with LOO and DC, ordered in time, space, and purpose, constitute the best possible vision of a commander on how to take an enemy´s COG out of the equation and meet the objectives and desired end state delivered by his superior; Why not move directly from the operational approach to the development of courses of action?
Trying to square away. Conclusions
Adopting planning processes from foreign military organizations has its risks. One of them is mistakes in translation and interpretation. Another is incorporating these processes in full, as our doctrine, without evaluating what aspects are or are not applicable to our reality. But perhaps the greatest risk is maintaining the inertia without reviewing and improving our processes, meanwhile real-life experiences are warning us that these processes are not being correctly understood.
Both OPP and OD are methodological tools for solving military problems in the 21st century; however, the operational environment that an operational commander faces is far more complex and much less structured than that confronted by a tactical commander. Therefore, it requires a methodology that deepens his analysis with an approach beyond the rational, focused on the commander and using operational art as an ally. Although both processes can be applied at all levels, OD is more suitable for the operational level, and OPP for the tactical.
Our joint planning doctrine must be reviewed.
If the operational commander decides to plan exclusively with OD as a tool, as this essay suggests, then the timeframe to understand the problem and develop the operational approach must be sufficiently broad so that the analysis carried out can adequately enclose the problem. At the same time, devise a conceptual solution for the planners to dress it up with the effects that will detail the concept of operations, but maintaining the commander's lines of operations (LOO) and decisive conditions (DC). We must consider changing the mentality to work, from many to only one, or at most, two courses of action, and condition its validity to the operational approach. With this vision, the analysis of a mission is meaningless.
If the operational commander decides to plan to use indistinctively OD and OPP, it becomes necessary to reach a consensus as to properly integrate each of the steps. Both the OD and OPP contain steps with different names, but that seek the same conclusions. To keep the joint planning doctrine as it is, means duplication of effort and confusion. If this vision is adopted, the suggestion is that the Operational Design be considered external and prior to initiating the Operation Planning Process, on the condition that the operational commander deems it necessary.
For tactical level planning, OPP can be maintained unaltered, were tasks and guidance from the operational commander are sufficient, and a mission that guides through a superior purpose, is still suitable. At the operational level, things are different
&&&&&&&&&&&&
Consejo de Seguridad de las Naciones Unidas sobre las mujeres, la paz y la seguridad


text:
Top 10 Super Cars of 2012
3. SSC Ultimate Aero: 257 mph
No one needs the definition for the Ultimate champion of the three consecutive years, if you remember it's the same SSC Ultimate which held the record to be the world's fastest car from 2007 to 2010 and that is even verified by no less than Guinness, it is perhaps one of the boldest automotive creations ever made. Its rebirth of SSC Ultimate Aero which is fundamentally a customized edition of the Aero, displacement of this same Chevrolet engine was augmented to 6.3 liters and supercharger boost was enhanced to 14 psi.
[youtube]http://www.youtube.com/watch?v=1x4d02uEZws[/youtube]
The consequences were simply incredible; almost 1200 horsepower and more than 1100 Newton meters of torque. Subsequent modifications such as twin-turbo and a new engine block, has allowed the output of the Ultimate Aero to increase even further. In 2009, the output was rated at 1287 horsepower, easily the world's most powerful car engine.
2. Koenigsegg Agera R: 260 mph
The Swedish "Hyper-Car" manufacturer is muscling its way toward Bugatti Veyron territory with its new Agera R, an even stronger edition of the pre-production Agera trial product that it displayed at last year's 2010 Geneva Auto Show. Not much known about this latest version of Agera R but Koenigsegg claims the Agera R has a "theoretical top speed" of around 273 mph, although it is electronically limited to 233 mph. The company adds that the speed governor "can be unlocked for shorter periods of time, if all necessary conditions are met, such as road condition, tire wear, service level of car" and so on. However for our top ten lists we'll limit the top speed as per previous models of Koenigsegg Agera i.e. 260 mph. Once the practical demonstration is completed with the claimed theoretical speed we shall be upgrading the list bringing the number one contender down to a 2nd rank. But for now Koenigsegg Agera R is on number 2 in our top ten lists.
[youtube]http://www.youtube.com/watch?v=J-p511is6ow[/youtube]
1. Bugatti Veyron Super Sport: 267 mph
On number 1 it's the ultimate Veyron holding the place with a remarkable top speed record of 267 mph. The Bugatti Veyron SuperSport has set a new production car land speed record, hitting 267mph at VW's Ehra-Lessien proving ground. 267mph. Well, 267.91mph to be precise, trouncing the 256.23mph set by the SSC Ultimate Aero in Nevada in 2007.
[youtube]http://www.youtube.com/watch?v=LSFX9vrwJf8[/youtube]
10 Largest Databases of the World
Enable the Emoji Keyboard on an iPhone
E3: The Biggest Gaming Expo
Realitypod June 12, 2017 November 22, 2020
Nano Particles Boil Freezing Water Using Solar Power
Realitypod May 11, 2014 November 22, 2020
Now Control The Bulb Of Your House From Your Phone [Video]

redpajama_set_name: RedPajamaCommonCrawl


Since childhood I used to sit in Dhikr circles and lectures at the Masajid. Once a Mawlana from the Naqshbandi Tariqah saw me and he took me to a corner of the Masjid and told me about the chanting of the Naqshbandi Tariqah. However due to my young age I was unable to maintain the Dhikr chants in the method I was ordered. Nevertheless, I used to attend these dhikr circles with my relatives. I used to hear the eulogies (speech in praise of someone or something who recently died) and songs of praise that they used to sing. One thing I specifically noted was that whenever the name of their Shaikh (Pir) was mentioned they would start screaming out loudly.
At the end of their dhikr they would say this in a loud voice. At the end, the deputy Mawlana of the khatam sharif would say 'Rabit Sharif' what they meant by this was, that during your dhikr the murids should picture and imagine their Shaikh (Pir) in their hearts, because according to their claims their Shaikh connects the murids to Allah.
So during dhikr they would start screaming. During wajd (trance) they would go in a state of ecstasy and rip their clothes. Once I saw a person come out from a high place and walked forward by trampling on the heads of those who were present. It looked as though a wrestler came into the arena. During the dhikr this Naqshbandi Mawlana used to become shocked at the screaming, shouting and misbehavior.
Then I said," So why do not you people say 'With the permission of Allah'?" I then knew that this person was lying.
 Translators Note: [Wajd] Which essentially means esoteric trance accompanied with strange body movements. Here the Shaikh has mentioned a specific form of worship the Sufis do. When they hear fabricated dhikr, eulogies and poems they go into a state of madness insanity). This is what they call wajd, tawajid and sama'. Apart from ripping their clothes they also dance, jump up and down, and move in really strange movements. The ignorant people then say that at this moment their line or call has been connected and they have a direct connection.


Annual awards for United Church of Christ members who are undergraduate students enrolled full-time at a postsecondary institution. Students must be preparing for evangelical ministry in the local church. Number of awards may vary.


Drew Ann Long, the Alabama mom who created a shopping cart for children with special needs that has captured the attention of Target, Walmart and other major retailers, has no plans to slow down.
Long and her invention, Caroline's Cart, have been in the media spotlight in recent months, since Target said it was putting the carts in its stores nationwide. The Today Show, CNN, I Heart Radio and more have come calling.
The Target announcement brought Caroline's Cart the most attention it's ever had, and there's also been a bump in sales. But Long says she's far from reaching her goal.
Drew Long invented Caroline's Cart after her struggles shopping with her daughter.
Target has put Caroline's Cart in all of its U.S. stores.
A mom of three from Alabaster, Long designed Caroline's Cart eight years ago. It is named after her daughter, Caroline, who has Rett Syndrome, a nervous system disorder that causes multiple disabilities.
Long had trouble navigating grocery store aisles with Caroline's wheelchair and a traditional shopping cart in tow, so Caroline's Cart has a special seat for her daughter and space for groceries.
For years, Long has led a grassroots effort to promote the carts, which can be found in hundreds of stores in every state in the U.S., as well as Canada, Norway, New Zealand and Australia. A number of major grocery chains have them, including Publix, Kroger, ShopRite and Wegman's.
She's been buoyed by thousands of supporters on social media, many of them families of children with special needs, from all over the world. She even got encouragement from First Lady Michelle Obama, whom she met at a fundraiser several years ago.
In 2013, Technibilt Ltd. began manufacturing the carts, which are designed to match the color scheme of various stores.
Target calls Caroline's Cart a "game-changer" for families.
Meanwhile, another major retailer is showing interest, too.
Walmart has been testing out the carts, and store managers can now order one upon request, Long said.
Even in the early days of promoting Caroline's Cart, Long said she felt like it could be a major hit.
So what's next for Caroline's Cart?
Long said she will continue to promote it, eyeing any retailer that has shopping carts. That includes Lowe's, Home Depot, Sears and shopping malls.
One thing that keeps her motivated is the fact that retailers provide different options for other groups, such as motorized scooters for adults who can't walk and carts shaped like racecars to entertain toddlers.


At The GlenDronach Distillery, Cask is King. Even more so when they partnered with blockbuster movie Kingsman: The Golden Circle as The GlenDronach is Director Matthew Vaughn's favourite Single Malt Scotch Whisky. Our job was to showcase this very special Single Malt to the world coinciding with the release of the film. With a PR campaign to a global audience backed up by engaging experiential and beautiful content.
Campaign Collateral: We created a series of beautiful stills and video to showcase the making of special whisky featuring Master Blender Rachel Barrie deployed across social.
Launch: Media were invited with delivery of a traditional London umbrella which is a trademark secret weapon in the film. At the event they experienced a luxurious whisky tasting with Rachel Barrie in the Napoleon Cellar at Berry Bro. & Rudd recreating a scene in the film.
Samples: We created a one of a kind book telling the story of the whisky which opened to include one of the 20 exclusive samples sent to world's media described as the 'most innovative whisky sample ever'.
Influencer Day: Working with 21st Century Fox we set up a mini-studio Kingsman set for global social media influencers to do tasting and interview with GlenDronach Global Brand Ambassador in the Napoleon Cellar at Berry Bros. & Rudd London as part of 'A Day in the Life of a Kingsman'.
Visit Britain: We teamed up with Visit Britain to bring global media influencers from China to Las Vegas to The GlenDronach for a special tasting and behind the scenes tour.
The news coverage alone generated over 60 stories with a 2.2 billion online readership featuring in titles including Esquire, FT:How to Spend it, Vogue France as well front cover Whisky Magazine and Spectator. The ultra-premium expression sold out in 30 countries in less than 30 days.


Points for publications are allotted in the academic year of FINAL acceptance of the publication.
Yale Voluntary Appointment title must be included in publication/meeting presentation to achieve service points.
cannot exceed 12 points per year.
Assist with teaching during a clinical review session. Session must be approved by and scheduled with the appropriate Section Chief.
Case of the Month must be approved by the faculty member's section chief.
Points will be allotted at the discretion of the Chair, with approval by the Voluntary Faculty Committee.
Evaluation: Teaching skills will be evaluated by students, residents, and staff.


text:
EASTON, MD. — Thomas T. Anderson of Easton died on January 20, 1996. He was 43.
Tom was the son of Theodore M. Anderson and the late Amelia K. Anderson. In addition to his father, Tom is survived by one son, Travis Christopher Anderson of Stevensville (now 15 yrs.), and two sisters, Margaret L. Anderson of River Forest, IL (class of '67) and Kathryn L. Folkes of Germantown, MD (class of '75). He had been married to Pamela J. Demaso Anderson of Kent Island.
Tom moved to the Eastern Shore in the late 70s, where he had worked as a Radio Announcer at stations WAQA and Easton's WCEI 96.7FM.
Services were held at Helfenbein Funeral Home in Chester on January 24, 1996 at 11:00am. Burial was at Oxford Cemetery in Easton, MD.
Memorial donations may be made to Make A Wish Foundation or to The Children's Hospital, 3825 Greenspring Ave., Baltimore, MD 21211.
Sisters, Margaret Anderson (1967) and Kathy Anderson Folkes (1975) are online with MSO.
Midnight Sun Online v01n01 August 1996


text:
Milo (sicilià Milu) és un municipi italià, dins de la ciutat metropolitana de Catània. L'any 2008 tenia 1.064 habitants. Limita amb els municipis de Giarre, Sant'Alfio i Zafferana Etnea.

Evolució demogràfica

Administració

Municipis de Catània

redpajama_set_name: RedPajamaWikipedia


The Pancake printer is the world's first 3D food printer capable of printing pancakes by automatically dispensing batter directly onto a griddle in a design of the user's choosing. Designs for printing can be created with the free easy to use downloadable software and then loaded to the PancakeBot 2.0 via the included SD card. Representing an evolution in food-printing technology, PancakeBot 2.0 lets kids and adults express their creativity through food while exploring technology.
The simple interface allows you to easily select a design to print from your SD card, pause and restart while printing, and even adjust the pressure and speed of the dispenser to perfect your pancake designs.
The PancakeBot can be conveniently disassembled for storage and the batter dispenser bottle and griddle can be removed for easy cleaning.
Draw your pancake with the PancakePainter software or choose a design from pancakebot.com website.
Load SD card with design files and insert into PancakeBot.
Make your pancake batter, load the bottle, and watch the PancakeBot print your design!


text:
Q: Is there a way to play a game with some elements from "Empire of the Smoky Skies" scenario? The "Empire of the Smoky Skies" scenario has a unique tech-tree (complete with unique units and buildings), unique social policies, unique leaders and unique victory conditions, as well as forced game speed and forced starting era.
Is there a way to play a game which uses only some of these elements? For instance, can I play it starting from an earlier era, with a different game pacing, and with standard social policies, but with the same tech-tree, leaders and victory conditions? Or play it with standard leaders, but all the rest remaining the same?

A: There seem to be no direct way of doing it, but I'm starting to see some mods which enable some of the scenario's features in a standard game:

*

*Luboric resource: civfanatics workshop

*Luboric and the landship-category units, via a tech-tree branch: civfanatics workshop
Please update this post if additional scenario-inspired mods come out.

redpajama_set_name: RedPajamaStackExchange


text:
Information Articles: Clinical
Conservatively Managing Meniscus Lesions
Wednesday, May 29, 2019 (0 Comments)
Posted by: Tim Bertelsman, DC, DACO
The knee menisci are shock-absorbent, fibrocartilage discs which conform to the femoral and tibial intraarticular contours. The medial and lateral menisci are both affixed to the superior articular surface of the tibia through anterior and posterior bony attachments. (1) The peripheral one-third of a meniscus (near its capsular attachment) is vascularized and innervated for pain and proprioception. The remainder of the meniscus is avascular and lacks nerve supply. (2,3) Not surprisingly, healing potential diminishes in the less vascular inner region. (28)
The menisci play an important role in knee biomechanics. The menisci transmit 50-70% of compressive loads in full knee extension and up to 85 percent at 90 degrees of flexion. (4) The lateral meniscus is thought to play a greater role in load transmission, while the medial meniscus provides greater stability, particularly as a secondary restraint to anterior tibial translation. (5,6) The menisci move posteriorly during knee flexion from 0-120 degrees, with the medial meniscus translating 5.1 mm and the lateral meniscus retreating up to 11 mm. (7) Other mechanical duties include shock absorption, prevention of synovial impingement, synovial fluid distribution and lubrication. (1)
Meniscal injuries are common, affecting 60-70 per 100,000 persons annually. Males are affected more frequently at a rate of 3 or 4:1.(3) Meniscal tears may be classified as "traumatic" or "degenerative." Meniscal injuries may occur at any age. In children and adolescents, the menisci are durable and rubbery, so most injuries are "traumatic" as a result of a forceful rotational injury. As we age, the meniscus grows weaker and "degenerative" tears become more likely, often resulting from simple or unrecognized insults. (1,3,9) "Degenerative" tears are more common. (1,3) The medial meniscus is damaged more commonly than the lateral meniscus, with acute tears often involving the middle and posterior regions. (1)
In addition to classifying meniscal injuries as traumatic or degenerative, they may be further classified according to the pattern of tear. Eighty percent of tears are classified as either "vertical" (flap, parrot beak, bucket handle) or "oblique." (3) "Radial" (transverse) tears disrupt the circumferential fibers of the meniscus and occur more frequently in the lateral meniscus. (9) "Longitudinal" tears are common in the medial meniscus. Additional tear patterns include "horizontal" and "complex." Acute meniscal injury may accompany fracture or ligamentous injury. Approximately one-third of meniscal tears are associated with ACL injuries. (9,10)
The typical presentation for meniscus injury is somewhat dependent upon the age of the patient. Young patients often present following a traumatic insult, particularly a sudden twist on a loaded knee. Following acute injury, the patient may have difficulty with full weight bearing and may demonstrate an altered gait. Older patients with degenerative injuries may not be able to report an inciting event. Patients of any age usually complain of intermittent, movement-related pain, chiefly upon deep knee bends. Clicking, catching or locking, particularly between 20-45 degrees of extension, is common. The patient may report a sensation of giving-way or buckling.
The presence of joint line tenderness, corresponding to the site of injury, may be one of the most reliable indicators of a tear. (74% sensitivity, 50% specificity). (3) Palpation may demonstrate signs of increased synovial fluid production, including cysts at or below the joint line, and swelling of the popliteal bursa (i.e., Baker's cyst). Palpation of the medial meniscus is enhanced by knee flexion and internal tibial rotation, and for the lateral meniscus with flexion and external rotation. (27) Range of motion may be limited in flexion or extension. Displaced (vertical or bucket handle) tears may present as a rubbery movement block. Terminal knee flexion or deep squatting is frequently uncomfortable. Circumduction testing of the knee commonly elicits pain. (11)
The most sensitive orthopedic test for the detection of meniscal injury is the Thessaly test at 20 degrees of knee flexion with a diagnostic accuracy of 94-96%. (12) The Thessaly test is performed with the patient standing flat footed on the affected leg, in front of the clinician, arms outstretched and supported by the clinician. The patient squats to flex their knee to 20 degrees and then rotates their trunk internally and externally. Reproduction of discomfort or catching constitutes a positive test. Another weight-bearing test for meniscus damage is Ege's test, performed as follows: the patient stands shoulder width apart and slowly squats, first with legs in maximal external rotation (to test the medial meniscus), and then with legs in maximal internal rotation (to test the lateral meniscus). Pain, clicking, or locking suggests meniscus tear. The test shows good sensitivity (64-67%) and specificity (81-90%) and is more accurate for detecting non-degenerative tears. (26)
McMurray's sign is performed on a supine patient with the hip and knee flexed to 90 degrees. The examiner passively extends the patient's knee with the foot internally and externally rotated while palpating the joint lines for a "clunk." Discomfort with this maneuver is common, but a true positive test requires a clunk and is rare, but extremely specific, when present. (3)
Plain film weight-bearing radiography may be needed to rule out fracture, osteochondral lesions, loose bodies and degenerative changes. (1) The Pittsburg Knee Rules are 99% sensitive for detecting fracture and state that radiographs are warranted with a mechanism of injury, including blunt trauma or a fall, AND any of the following: age < 12, age >50, or inability to walk four weight-bearing steps. (30) Alternately, the Ottawa Knee Rules state that an X-ray is required to rule out fracture only in patients who have an acute knee injury with one or more of the following: age 55 years or older, tenderness at head of fibula, isolated tenderness of patella, inability to flex the knee greater than 90 degrees, or inability to bear weight both immediately and in the emergency department for 4 steps. (31)
MRI is the most sensitive imaging modality for evaluation of menisci, but interpretation of MRI findings with regard to meniscal injuries may be confusing, and false positives are common. MRI exams reveal clinically irrelevant signal alterations or tears in 30-36% of asymptomatic patients. (13,29) Routine MRI imaging should be reserved for patients in whom arthroscopic surgery is anticipated. (14)
Chiropractors can play an important role in the rehabilitation of most degenerative and some traumatic meniscal injuries. Although the majority of acute tears in a young population will require surgical intervention, one-third of these injuries may be treated conservatively with full resolution. (16) Acute tears most amenable to conservative care include peripheral radial tears less than 5 mm and longitudinal tears along the posterior horn of the lateral meniscus. (17) Acute tears associated with joint locking warrant surgical referral.
For older patients with degenerative tears, a trial of conservative therapy is generally appropriate. The patient's age roughly correlates with the need for surgical intervention. Only about 6% of patients over the age of 40 require operative management. (18) Patients with manageable pain and swelling, without loss of joint function, have shown functional improvement through conservative care equal to those who have undergone arthroscopic surgery. (19,32)
Initial conservative management should include rest, ice, compression and elevation (RICE). Activity modification is essential to prevent further damage. Patients should avoid twisting on a weight-bearing, flexed knee and may need to temporarily or permanently discontinue high-energy sports activity, like soccer or tennis. In some instances, a brace may be necessary to limit motion. Ice and anti-inflammatory modalities may help limit inflammation. NSAID's may be appropriate in the initial stages. (20)
Stretching and myofascial release techniques may be necessary for the hamstring, adductor, quadriceps, gastroc, soleus and popliteus muscles. IASTM of the knee capsule may provide benefit, as the meniscus has a shared attachment with this structure. Manipulation may be necessary for restrictions in the ankle mortise joint, fibular head, hip, sacroiliac joints and spine.
Stationary bicycling, water walking and isometric strength training may be incorporated as swelling decreases. Later, dynamic exercises should include single leg calf raises, knee flexion, knee extension and lunges above 80 degrees of knee flexion. (21) Biomechanical deficits in hip or knee stability should be addressed, particularly gluteal weakness and patellofemoral tracking disorders. Arch supports or orthotics may be necessary for patients who overpronate.
Patients who require surgical repair may also benefit from a well planned home exercise program. Rehab goals following partial meniscectomy include reduction of pain and inflammation with restoration of range of motion, strength and function. Restoration of pre-operative quadriceps and hamstring strength is essential. (22) Post-arthroscopic rehabilitation should progress through the aforementioned exercises as tolerated, avoiding torsion to a flexed and loaded knee.
Surgical removal of meniscal tissue results in increased bony contact between the tibia and femur. (7) Degenerative changes develop in nearly all post-meniscectomy patients. (24) Degeneration seems to more common in those who have undergone lateral meniscectomy. (25)
1. Goldblatt JP, Managing meniscal injuries: The diagnosis. J Musculoskel Med. 2009;26:343-351
2. Arnoczky SP, McDevitt CA. The meniscus: structure, function, repair, and replacement. In: Buckwalter JA, Einhorn TA, Simon SR, eds. Orthopaedic Basic Science: Biology and Biomechanics of the Musculoskeletal System. 2nd ed. Rosemont, IL: American Academy of Orthopaedic Surgeons; 2000:531-545.
3. Greis PE, Bardana DD, Holmstrom MC, Burks RT. Meniscal injury, I: basic science and evaluation. J Am Acad Orthop Surg. 2002;10:168-176
4. Rath E, Richmond JC. The menisci: basic science and advances in treatment. Br J Sports Med. 2000;34:252-257.
5. Packer JD, Rodeo SA. Meniscal allograft transplantation. Clin Sports Med. 2009:28:259-283, viii.
6. Levy IM, Torzilli PA, Warren RF. The effect of medial meniscectomy on anterior-posterior motion of the knee. J Bone Joint Surg. 1982;64A:883-888.
7. Simon SR, Alaranta H, An KN, et al. Kinesiology. In: Buckwalter JA, Einhorn TA, Simon SR, eds. Orthopaedic Basic Science: Biology and Biomechanics of the Musculoskeletal System. 2nd ed. Rosemont, IL: American Academy of Orthopaedic Surgeons; 2000:730-827.
9. Klimkiewicz JJ, Shaffer B. Meniscal surgery 2002 update: indications and techniques for resection, repair, regeneration, and replacement. Arthroscopy. 2002;18:14-25.
10. Kilcoyne KG et al Epidemiology of meniscal injury associated with ACL tears in young athletes"; The Cutting Edge, OrthoSuperSite; March 2012
11. Levy IM, Torzilli PA, Gould JD, Warren RF. The effect of lateral meniscectomy on motion of the knee. J Bone Joint Surg. 1989;71A:401-406.
12. Karachalios T, Hantes M, Zibis AH, et al. Diagnostic accuracy of a new clinical test (the Thessaly test) for early detection of meniscal tears. J Bone Joint Surg. 2005;87A:955-962.
13. Rath E, Richmond JC. The menisci: basic science and advances in treatment. Br J Sports Med. 2000;34:252-257.
14. Miller GK. A prospective study comparing the accuracy of the clinical diagnosis of meniscus tear with magnetic resonance imaging and its effect on clinical outcome. Arthroscopy. 1996;12:406-413.
15. Ciliz D, Ciliz A, Elverici E, et al. Evaluation of post-operative menisci with MR arthrography and routine conventional MRI. Clin Imaging. 2008;32:212-219
16. Goodwin Peter C, Effectiveness of supervised PTin the early period after arthroscopic partial menisectomy. Physical Therapy, 2003;83(6): 520-535.
17. Saidoff David, McDonough Andrew. Critical Pathways in therapeutic intervention. Extremities and Spine; Philadelphia, PA:Mosby Inc., 2002: 611-639.
18. Barrett GR, Field MH, Treacy SH, Ruff CG. Clinical results of meniscus repair in patients 40 years and older. Arthroscopy 1998;14:824–9.
19. Rimington T, Mallik K, Evans D, Mroczek K, Reider B. A prospective study of the nonoperative treatment of degenerative meniscus tears. Orthopedics 2009;32:8.
20. Lim HC, Bae JH, Wang JH, Seok CW, Kim MK. Non-operative treatment of degenerative posterior root tear of the medial meniscus. Knee Surg Sports Traumatol Arthrosc 2010;18:535–9.
21. Havard Osteras, Arthroscopic or conservative treatment of degenerative medial meniscal tears: a prospective randomised trial. Knee Surg Sports Traumatol Arthrosc. 24 August 2006
22. Matthews P, St-Pierre DM. Recovery of muscle strength following arthroscopic meniscectomy. J Orthop Sports Phys Ther. 1996;23:18–26
24. Andersson-Molina H, Karlsson H, Rockborn P. Arthroscopic partial and total meniscectomy: a long-term follow-up study with matched controls. Arthroscopy. 2002;18:183-189.
25. Salata MJ. A Systematic Review of Clinical Outcomes in Patients Undergoing Meniscectomy. American Journal of Sports Medicine. 2010 vol. 38 no. 9 1907-1916
26. Akseki D, Ozcan O, Boya H, Pinar H. A new weight-bearing meniscal test and a comparison with McMurray's test and joint line tenderness. Arthroscopy, 2004;20(9):951-958.
27. Chivers M, Howitt S. Anatomy and physical examination of the knee menisci: a narrative review of the orthopedic literature. J Can Chiropr Assoc, 2009;53(4):319-333.
28. Jeong H, Lee S, Ko C. Meniscectomy. Knee Surg Related Res, 2012;24(3):129-136.
29. Ryzewicz M, Peterson B, Siparsky P, Bartz R. The diagnosis of meniscus tears. Clin Orthop Related Res, 2007;455:123-133.
30. Seaberg, David C. et al. Clinical decision rule for knee radiographs. The American Journal of Emergency Medicine, Volume 12, Issue 5 , 541 - 543
31. Stiell IG et al. Implementation of the Ottawa Knee Rule for the use of radiography in acute knee injuries. JAMA 1997 Dec 17;278(23):2075-9.
32. van de Graaf VA, Noorduyn JCA, Willigenburg NW, et al. Effect of Early Surgery vs Physical Therapy on Knee Function Among Patients With Nonobstructive Meniscal TearsThe ESCAPE Randomized Clinical Trial. JAMA.2018;320(13):1328–1337. doi:10.1001/jama.2018.13308
#ICSClinical #ICSTags


Adam and Drew open the show discussing the recent telecast of The Grammy awards and the things they enjoyed and were confused about including Drew's confusion as to why this particular art form is using so many aspects of entertainment beyond music. Adam also tells Drew a confusing story about an observation he made regarding his dog poop situation about how it led him down a confusing road in his mind. As the show winds down they speak to a caller who lost her husband and is at odds with his remaining family members in terms of his burial/cremation plan.
This entry was posted in Podcast on February 21, 2017 by Chris Laxamana.


text:
How do you spell knaidel?
Confetti falling over Arvind Mahankali of Bayside Hills, N.Y., after he won the 2013 Scripps National Spelling Bee in Oxon Hill, Md., May 30, 2013. (Alex Wong/Getty Images)
Confetti falling over Arvind Mahankali of Bayside Hills, N.Y., after he won the 2013 Scripps National Spelling Bee in National Harbor, Md., May 30, 2013. (Alex Wong/Getty Images)
(JTA) — An Indian-American boy spelled the Yiddish-derived word "knaidel" correctly to win the 2013 Scripps National Spelling Bee.
Arvind Mahankali, 13, of Bayside Hills, N.Y., defeated 10 other finalists on Thursday in National Harbor, Md., after spelling the word for a traditional Jewish dumpling.
Mahankali won $30,000 in cash, a $2,500 U.S. savings bond from Merriam-Webster and $2,000 worth of reference works from Encyclopedia Britannica, as well as a trophy.
German words have led Mahankali to his spelling bee demise for the past two years, when he placed third at the bee.
knaidel
Vocabulary.com, which covered the bee, described knaidel as coming from "German-derived Yiddish." It quoted Mahankali as telling ESPN, "the German curse has turned into the German blessing."
The finals featured another word of Jewish origin. Hannah Citsay, a student at St. Anne Catholic School in Lancaster, Pa., correctly spelled "hesped," the Hebrew word for eulogy, in the sixth round.
Citsay was eliminated in a new portion of the competition that had contestants providing the definition of a word.
In this original Holocaust film, a Jewish inmate makes up a language to survive
By	Cnaan Liphshiz	 January 15, 2021 2:23 pm
By	Cnaan Liphshiz	 January 15, 2021 11:48 am
These 10 iconic Debbie Friedman songs are exactly what we need right now
By	Maddy Albert	 January 15, 2021 11:40 am
from Kveller	This link opens in a new window
Raised Catholic, Coleen Dieker plays in both Irish punk and Jewish prayer bands
By	Uriel Heilman	 January 14, 2021 3:36 pm
Jewish community shaped by the Inquisition opens Portugal's first Holocaust museum
Meet Lloyd Wolf, a Jewish photographer who captured photos of the Capitol mob
By	Shira Feder	 January 13, 2021 3:15 pm


text:
/* Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.activiti.engine.impl.history;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.FlowNode;
import org.activiti.bpmn.model.SequenceFlow;
import org.activiti.engine.delegate.event.ActivitiEventDispatcher;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.delegate.event.impl.ActivitiEventBuilder;
import org.activiti.engine.impl.cfg.IdGenerator;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.identity.Authentication;
import org.activiti.engine.impl.persistence.AbstractManager;
import org.activiti.engine.impl.persistence.cache.EntityCache;
import org.activiti.engine.impl.persistence.entity.CommentEntity;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.HistoricActivityInstanceEntity;
import org.activiti.engine.impl.persistence.entity.HistoricDetailVariableInstanceUpdateEntity;
import org.activiti.engine.impl.persistence.entity.HistoricIdentityLinkEntity;
import org.activiti.engine.impl.persistence.entity.HistoricProcessInstanceEntity;
import org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity;
import org.activiti.engine.impl.persistence.entity.HistoricVariableInstanceEntity;
import org.activiti.engine.impl.persistence.entity.IdentityLinkEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.persistence.entity.VariableInstanceEntity;
import org.activiti.engine.task.Event;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Manager class that centralises recording of all history-related operations that are originated from inside the engine.
 *
 * @author Frederik Heremans
 * @author Joram Barrez
 */
public class DefaultHistoryManager extends AbstractManager implements HistoryManager {

  private static Logger log = LoggerFactory.getLogger(DefaultHistoryManager.class.getName());

  private HistoryLevel historyLevel;

  public DefaultHistoryManager(ProcessEngineConfigurationImpl processEngineConfiguration, HistoryLevel historyLevel) {
    super(processEngineConfiguration);
    this.historyLevel = historyLevel;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# isHistoryLevelAtLeast(org.activiti.engine.impl.history.HistoryLevel)
   */
  @Override
  public boolean isHistoryLevelAtLeast(HistoryLevel level) {
    if (log.isDebugEnabled()) {
      log.debug("Current history level: {}, level required: {}", historyLevel, level);
    }
    // Comparing enums actually compares the location of values declared in
    // the enum
    return historyLevel.isAtLeast(level);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#isHistoryEnabled ()
   */
  @Override
  public boolean isHistoryEnabled() {
    if (log.isDebugEnabled()) {
      log.debug("Current history level: {}", historyLevel);
    }
    return !historyLevel.equals(HistoryLevel.NONE);
  }

  // Process related history

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordProcessInstanceEnd(java.lang.String, java.lang.String, java.lang.String)
   */
  @Override
  public void recordProcessInstanceEnd(String processInstanceId, String deleteReason, String activityId) {

    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
      HistoricProcessInstanceEntity historicProcessInstance = getHistoricProcessInstanceEntityManager().findById(processInstanceId);

      if (historicProcessInstance != null) {
        historicProcessInstance.markEnded(deleteReason);
        historicProcessInstance.setEndActivityId(activityId);

        // Fire event
        ActivitiEventDispatcher activitiEventDispatcher = getEventDispatcher();
        if (activitiEventDispatcher != null && activitiEventDispatcher.isEnabled()) {
          activitiEventDispatcher.dispatchEvent(
              ActivitiEventBuilder.createEntityEvent(ActivitiEventType.HISTORIC_PROCESS_INSTANCE_ENDED, historicProcessInstance));
        }

      }
    }
  }

  @Override
  public void recordProcessInstanceNameChange(String processInstanceId, String newName) {
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
      HistoricProcessInstanceEntity historicProcessInstance = getHistoricProcessInstanceEntityManager().findById(processInstanceId);

      if (historicProcessInstance != null) {
        historicProcessInstance.setName(newName);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordProcessInstanceStart (org.activiti.engine.impl.persistence.entity.ExecutionEntity)
   */
  @Override
  public void recordProcessInstanceStart(ExecutionEntity processInstance, FlowElement startElement) {
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
      HistoricProcessInstanceEntity historicProcessInstance = getHistoricProcessInstanceEntityManager().create(processInstance);
      historicProcessInstance.setStartActivityId(startElement.getId());

      // Insert historic process-instance
      getHistoricProcessInstanceEntityManager().insert(historicProcessInstance, false);

      // Fire event
      ActivitiEventDispatcher activitiEventDispatcher = getEventDispatcher();
      if (activitiEventDispatcher != null && activitiEventDispatcher.isEnabled()) {
        activitiEventDispatcher.dispatchEvent(
            ActivitiEventBuilder.createEntityEvent(ActivitiEventType.HISTORIC_PROCESS_INSTANCE_CREATED, historicProcessInstance));
      }

    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordSubProcessInstanceStart (org.activiti.engine.impl.persistence.entity.ExecutionEntity,
   * org.activiti.engine.impl.persistence.entity.ExecutionEntity)
   */
  @Override
  public void recordSubProcessInstanceStart(ExecutionEntity parentExecution, ExecutionEntity subProcessInstance, FlowElement initialElement) {
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {

      HistoricProcessInstanceEntity historicProcessInstance = getHistoricProcessInstanceEntityManager().create(subProcessInstance);

      // Fix for ACT-1728: startActivityId not initialized with subprocess instance
      if (historicProcessInstance.getStartActivityId() == null) {
        historicProcessInstance.setStartActivityId(initialElement.getId());
      }
      getHistoricProcessInstanceEntityManager().insert(historicProcessInstance, false);

      // Fire event
      ActivitiEventDispatcher activitiEventDispatcher = getEventDispatcher();
      if (activitiEventDispatcher != null && activitiEventDispatcher.isEnabled()) {
        activitiEventDispatcher.dispatchEvent(
            ActivitiEventBuilder.createEntityEvent(ActivitiEventType.HISTORIC_PROCESS_INSTANCE_CREATED, historicProcessInstance));
      }

      HistoricActivityInstanceEntity activitiyInstance = findActivityInstance(parentExecution, false, true);
      if (activitiyInstance != null) {
        activitiyInstance.setCalledProcessInstanceId(subProcessInstance.getProcessInstanceId());
      }

    }
  }

  // Activity related history

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#recordActivityStart (org.activiti.engine.impl.persistence.entity.ExecutionEntity)
   */
  @Override
  public void recordActivityStart(ExecutionEntity executionEntity) {
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
      if (executionEntity.getActivityId() != null && executionEntity.getCurrentFlowElement() != null) {

        HistoricActivityInstanceEntity historicActivityInstanceEntity = null;

        // Historic activity instance could have been created (but only in cache, never persisted)
        // for example when submitting form properties
        HistoricActivityInstanceEntity historicActivityInstanceEntityFromCache =
            getHistoricActivityInstanceFromCache(executionEntity.getId(), executionEntity.getActivityId(), true);
        if (historicActivityInstanceEntityFromCache != null) {
          historicActivityInstanceEntity = historicActivityInstanceEntityFromCache;
        } else {
          historicActivityInstanceEntity = createHistoricActivityInstanceEntity(executionEntity);
        }

        // Fire event
        ActivitiEventDispatcher activitiEventDispatcher = getEventDispatcher();
        if (activitiEventDispatcher != null && activitiEventDispatcher.isEnabled()) {
          activitiEventDispatcher.dispatchEvent(
              ActivitiEventBuilder.createEntityEvent(ActivitiEventType.HISTORIC_ACTIVITY_INSTANCE_CREATED, historicActivityInstanceEntity));
        }

      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#recordActivityEnd (org.activiti.engine.impl.persistence.entity.ExecutionEntity)
   */
  @Override
  public void recordActivityEnd(ExecutionEntity executionEntity, String deleteReason) {
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
      HistoricActivityInstanceEntity historicActivityInstance = findActivityInstance(executionEntity, false, true);
      if (historicActivityInstance != null) {
        historicActivityInstance.markEnded(deleteReason);

        // Fire event
        ActivitiEventDispatcher activitiEventDispatcher = getEventDispatcher();
        if (activitiEventDispatcher != null && activitiEventDispatcher.isEnabled()) {
          activitiEventDispatcher.dispatchEvent(
              ActivitiEventBuilder.createEntityEvent(ActivitiEventType.HISTORIC_ACTIVITY_INSTANCE_ENDED, historicActivityInstance));
        }
      }
    }
  }

  @Override
  public HistoricActivityInstanceEntity findActivityInstance(ExecutionEntity execution, boolean createOnNotFound, boolean endTimeMustBeNull) {
    String activityId = null;
    if (execution.getCurrentFlowElement() instanceof FlowNode) {
      activityId = execution.getCurrentFlowElement().getId();
    } else if (execution.getCurrentFlowElement() instanceof SequenceFlow
        && execution.getCurrentActivitiListener() == null) { // while executing sequence flow listeners, we don't want historic activities
      activityId = ( (SequenceFlow) (execution.getCurrentFlowElement())).getSourceFlowElement().getId();
    }

    if (activityId != null) {
      return findActivityInstance(execution, activityId, createOnNotFound, endTimeMustBeNull);
    }

    return null;
  }

  public HistoricActivityInstanceEntity findActivityInstance(ExecutionEntity execution, String activityId, boolean createOnNotFound, boolean endTimeMustBeNull) {

    // No use looking for the HistoricActivityInstance when no activityId is provided.
    if (activityId == null) {
      return null;
    }

    String executionId = execution.getId();

    // Check the cache
    HistoricActivityInstanceEntity historicActivityInstanceEntityFromCache =
        getHistoricActivityInstanceFromCache(executionId, activityId, endTimeMustBeNull);
    if (historicActivityInstanceEntityFromCache != null) {
      return historicActivityInstanceEntityFromCache;
    }

    // If the execution was freshly created, there is no need to check the database,
    // there can never be an entry for a historic activity instance with this execution id.
    if (!execution.isInserted() && !execution.isProcessInstanceType()) {

      // Check the database
      List<HistoricActivityInstanceEntity> historicActivityInstances = getHistoricActivityInstanceEntityManager()
          .findUnfinishedHistoricActivityInstancesByExecutionAndActivityId(executionId, activityId);

      if (historicActivityInstances.size() > 0) {
        return historicActivityInstances.get(0);
      }

    }

    if (execution.getParentId() != null) {
      HistoricActivityInstanceEntity historicActivityInstanceFromParent
        = findActivityInstance((ExecutionEntity) execution.getParent(), activityId, false, endTimeMustBeNull); // always false for create, we only check if it can be found
      if (historicActivityInstanceFromParent != null) {
        return historicActivityInstanceFromParent;
      }
    }

    if (createOnNotFound
        && activityId != null
        && ( (execution.getCurrentFlowElement() != null && execution.getCurrentFlowElement() instanceof FlowNode) || execution.getCurrentFlowElement() == null)) {
      return createHistoricActivityInstanceEntity(execution);
    }

    return null;
  }

  protected HistoricActivityInstanceEntity getHistoricActivityInstanceFromCache(String executionId, String activityId, boolean endTimeMustBeNull) {
    List<HistoricActivityInstanceEntity> cachedHistoricActivityInstances = getEntityCache().findInCache(HistoricActivityInstanceEntity.class);
    for (HistoricActivityInstanceEntity cachedHistoricActivityInstance : cachedHistoricActivityInstances) {
      if (activityId != null
          && activityId.equals(cachedHistoricActivityInstance.getActivityId())
          && (!endTimeMustBeNull || cachedHistoricActivityInstance.getEndTime() == null)) {
        if (executionId.equals(cachedHistoricActivityInstance.getExecutionId())) {
          return cachedHistoricActivityInstance;
        }
      }
    }

    return null;
  }

  protected HistoricActivityInstanceEntity createHistoricActivityInstanceEntity(ExecutionEntity execution) {
    IdGenerator idGenerator = getProcessEngineConfiguration().getIdGenerator();

    String processDefinitionId = execution.getProcessDefinitionId();
    String processInstanceId = execution.getProcessInstanceId();

    HistoricActivityInstanceEntity historicActivityInstance = getHistoricActivityInstanceEntityManager().create();
    historicActivityInstance.setId(idGenerator.getNextId());
    historicActivityInstance.setProcessDefinitionId(processDefinitionId);
    historicActivityInstance.setProcessInstanceId(processInstanceId);
    historicActivityInstance.setExecutionId(execution.getId());
    historicActivityInstance.setActivityId(execution.getActivityId());
    if (execution.getCurrentFlowElement() != null) {
      historicActivityInstance.setActivityName(execution.getCurrentFlowElement().getName());
      historicActivityInstance.setActivityType(parseActivityType(execution.getCurrentFlowElement()));
    }
    Date now = getClock().getCurrentTime();
    historicActivityInstance.setStartTime(now);

    // Inherit tenant id (if applicable)
    if (execution.getTenantId() != null) {
      historicActivityInstance.setTenantId(execution.getTenantId());
    }

    getHistoricActivityInstanceEntityManager().insert(historicActivityInstance);
    return historicActivityInstance;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordProcessDefinitionChange(java.lang.String, java.lang.String)
   */
  @Override
  public void recordProcessDefinitionChange(String processInstanceId, String processDefinitionId) {
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
      HistoricProcessInstanceEntity historicProcessInstance = getHistoricProcessInstanceEntityManager().findById(processInstanceId);
      if (historicProcessInstance != null) {
        historicProcessInstance.setProcessDefinitionId(processDefinitionId);
      }
    }
  }

  // Task related history

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#recordTaskCreated (org.activiti.engine.impl.persistence.entity.TaskEntity,
   * org.activiti.engine.impl.persistence.entity.ExecutionEntity)
   */
  @Override
  public void recordTaskCreated(TaskEntity task, ExecutionEntity execution) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().create(task, execution);
      getHistoricTaskInstanceEntityManager().insert(historicTaskInstance, false);
    }

    recordTaskId(task);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#recordTaskAssignment (org.activiti.engine.impl.persistence.entity.TaskEntity)
   */
  @Override
  public void recordTaskAssignment(TaskEntity task) {
    ExecutionEntity executionEntity = task.getExecution();
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
      if (executionEntity != null) {
        HistoricActivityInstanceEntity historicActivityInstance = findActivityInstance(executionEntity, false, true);
        if (historicActivityInstance != null) {
          historicActivityInstance.setAssignee(task.getAssignee());
        }
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#recordTaskClaim (org.activiti.engine.impl.persistence.entity.TaskEntity)
   */

  @Override
  public void recordTaskClaim(TaskEntity task) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(task.getId());
      if (historicTaskInstance != null) {
        historicTaskInstance.setClaimTime(task.getClaimTime());
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#recordTaskId (org.activiti.engine.impl.persistence.entity.TaskEntity)
   */
  @Override
  public void recordTaskId(TaskEntity task) {
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
      ExecutionEntity execution = task.getExecution();
      if (execution != null) {
        HistoricActivityInstanceEntity historicActivityInstance = findActivityInstance(execution, false, true);
        if (historicActivityInstance != null) {
          historicActivityInstance.setTaskId(task.getId());
        }
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#recordTaskEnd (java.lang.String, java.lang.String)
   */
  @Override
  public void recordTaskEnd(String taskId, String deleteReason) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.markEnded(deleteReason);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordTaskAssigneeChange(java.lang.String, java.lang.String)
   */
  @Override
  public void recordTaskAssigneeChange(String taskId, String assignee) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setAssignee(assignee);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordTaskOwnerChange(java.lang.String, java.lang.String)
   */
  @Override
  public void recordTaskOwnerChange(String taskId, String owner) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setOwner(owner);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#recordTaskNameChange (java.lang.String, java.lang.String)
   */
  @Override
  public void recordTaskNameChange(String taskId, String taskName) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setName(taskName);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordTaskDescriptionChange(java.lang.String, java.lang.String)
   */
  @Override
  public void recordTaskDescriptionChange(String taskId, String description) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setDescription(description);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordTaskDueDateChange(java.lang.String, java.util.Date)
   */
  @Override
  public void recordTaskDueDateChange(String taskId, Date dueDate) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setDueDate(dueDate);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordTaskPriorityChange(java.lang.String, int)
   */
  @Override
  public void recordTaskPriorityChange(String taskId, int priority) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setPriority(priority);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordTaskCategoryChange(java.lang.String, java.lang.String)
   */
  @Override
  public void recordTaskCategoryChange(String taskId, String category) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setCategory(category);
      }
    }
  }

  @Override
  public void recordTaskFormKeyChange(String taskId, String formKey) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setFormKey(formKey);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordTaskParentTaskIdChange(java.lang.String, java.lang.String)
   */
  @Override
  public void recordTaskParentTaskIdChange(String taskId, String parentTaskId) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setParentTaskId(parentTaskId);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordTaskExecutionIdChange(java.lang.String, java.lang.String)
   */
  @Override
  public void recordTaskExecutionIdChange(String taskId, String executionId) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setExecutionId(executionId);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordTaskDefinitionKeyChange (org.activiti.engine.impl.persistence.entity.TaskEntity, java.lang.String)
   */
  @Override
  public void recordTaskDefinitionKeyChange(String taskId, String taskDefinitionKey) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setTaskDefinitionKey(taskDefinitionKey);
      }
    }
  }

  /* (non-Javadoc)
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#recordTaskProcessDefinitionChange(java.lang.String, java.lang.String)
   */
  @Override
  public void recordTaskProcessDefinitionChange(String taskId, String processDefinitionId) {
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
      HistoricTaskInstanceEntity historicTaskInstance = getHistoricTaskInstanceEntityManager().findById(taskId);
      if (historicTaskInstance != null) {
        historicTaskInstance.setProcessDefinitionId(processDefinitionId);
      }
    }
  }

  // Variables related history

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#recordVariableCreate (org.activiti.engine.impl.persistence.entity.VariableInstanceEntity)
   */
  @Override
  public void recordVariableCreate(VariableInstanceEntity variable) {
    // Historic variables
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
     getHistoricVariableInstanceEntityManager().copyAndInsert(variable);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordHistoricDetailVariableCreate (org.activiti.engine.impl.persistence.entity.VariableInstanceEntity,
   * org.activiti.engine.impl.persistence.entity.ExecutionEntity, boolean)
   */
  @Override
  public void recordHistoricDetailVariableCreate(VariableInstanceEntity variable, ExecutionEntity sourceActivityExecution, boolean useActivityId) {
    if (isHistoryLevelAtLeast(HistoryLevel.FULL)) {

      HistoricDetailVariableInstanceUpdateEntity historicVariableUpdate = getHistoricDetailEntityManager().copyAndInsertHistoricDetailVariableInstanceUpdateEntity(variable);

      if (useActivityId && sourceActivityExecution != null) {
        HistoricActivityInstanceEntity historicActivityInstance = findActivityInstance(sourceActivityExecution, false, false);
        if (historicActivityInstance != null) {
          historicVariableUpdate.setActivityInstanceId(historicActivityInstance.getId());
        }
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface#recordVariableUpdate (org.activiti.engine.impl.persistence.entity.VariableInstanceEntity)
   */
  @Override
  public void recordVariableUpdate(VariableInstanceEntity variable) {
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
      HistoricVariableInstanceEntity historicProcessVariable = getEntityCache().findInCache(HistoricVariableInstanceEntity.class, variable.getId());
      if (historicProcessVariable == null) {
        historicProcessVariable = getHistoricVariableInstanceEntityManager().findHistoricVariableInstanceByVariableInstanceId(variable.getId());
      }

      if (historicProcessVariable != null) {
        getHistoricVariableInstanceEntityManager().copyVariableValue(historicProcessVariable, variable);
      } else {
        getHistoricVariableInstanceEntityManager().copyAndInsert(variable);
      }
    }
  }

  // Comment related history

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# createIdentityLinkComment(java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean)
   */
  @Override
  public void createIdentityLinkComment(String taskId, String userId, String groupId, String type, boolean create) {
    createIdentityLinkComment(taskId, userId, groupId, type, create, false);
  }

  @Override
  public void createUserIdentityLinkComment(String taskId, String userId, String type, boolean create) {
    createIdentityLinkComment(taskId, userId, null, type, create, false);
  }

  @Override
  public void createGroupIdentityLinkComment(String taskId, String groupId, String type, boolean create) {
    createIdentityLinkComment(taskId, null, groupId, type, create, false);
  }

  @Override
  public void createUserIdentityLinkComment(String taskId, String userId, String type, boolean create, boolean forceNullUserId) {
    createIdentityLinkComment(taskId, userId, null, type, create, forceNullUserId);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# createIdentityLinkComment(java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean, boolean)
   */
  @Override
  public void createIdentityLinkComment(String taskId, String userId, String groupId, String type, boolean create, boolean forceNullUserId) {
    if (isHistoryEnabled()) {
      String authenticatedUserId = Authentication.getAuthenticatedUserId();
      CommentEntity comment = getCommentEntityManager().create();
      comment.setUserId(authenticatedUserId);
      comment.setType(CommentEntity.TYPE_EVENT);
      comment.setTime(getClock().getCurrentTime());
      comment.setTaskId(taskId);
      if (userId != null || forceNullUserId) {
        if (create) {
          comment.setAction(Event.ACTION_ADD_USER_LINK);
        } else {
          comment.setAction(Event.ACTION_DELETE_USER_LINK);
        }
        comment.setMessage(new String[] { userId, type });
      } else {
        if (create) {
          comment.setAction(Event.ACTION_ADD_GROUP_LINK);
        } else {
          comment.setAction(Event.ACTION_DELETE_GROUP_LINK);
        }
        comment.setMessage(new String[] { groupId, type });
      }

      getCommentEntityManager().insert(comment);
    }
  }

  @Override
  public void createProcessInstanceIdentityLinkComment(String processInstanceId, String userId, String groupId, String type, boolean create) {
    createProcessInstanceIdentityLinkComment(processInstanceId, userId, groupId, type, create, false);
  }

  @Override
  public void createProcessInstanceIdentityLinkComment(String processInstanceId, String userId, String groupId, String type, boolean create, boolean forceNullUserId) {
    if (isHistoryEnabled()) {
      String authenticatedUserId = Authentication.getAuthenticatedUserId();
      CommentEntity comment = getCommentEntityManager().create();
      comment.setUserId(authenticatedUserId);
      comment.setType(CommentEntity.TYPE_EVENT);
      comment.setTime(getClock().getCurrentTime());
      comment.setProcessInstanceId(processInstanceId);
      if (userId != null || forceNullUserId) {
        if (create) {
          comment.setAction(Event.ACTION_ADD_USER_LINK);
        } else {
          comment.setAction(Event.ACTION_DELETE_USER_LINK);
        }
        comment.setMessage(new String[] { userId, type });
      } else {
        if (create) {
          comment.setAction(Event.ACTION_ADD_GROUP_LINK);
        } else {
          comment.setAction(Event.ACTION_DELETE_GROUP_LINK);
        }
        comment.setMessage(new String[] { groupId, type });
      }
      getCommentEntityManager().insert(comment);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# createAttachmentComment(java.lang.String, java.lang.String, java.lang.String, boolean)
   */
  @Override
  public void createAttachmentComment(String taskId, String processInstanceId, String attachmentName, boolean create) {
    if (isHistoryEnabled()) {
      String userId = Authentication.getAuthenticatedUserId();
      CommentEntity comment = getCommentEntityManager().create();
      comment.setUserId(userId);
      comment.setType(CommentEntity.TYPE_EVENT);
      comment.setTime(getClock().getCurrentTime());
      comment.setTaskId(taskId);
      comment.setProcessInstanceId(processInstanceId);
      if (create) {
        comment.setAction(Event.ACTION_ADD_ATTACHMENT);
      } else {
        comment.setAction(Event.ACTION_DELETE_ATTACHMENT);
      }
      comment.setMessage(attachmentName);
      getCommentEntityManager().insert(comment);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# reportFormPropertiesSubmitted (org.activiti.engine.impl.persistence.entity.ExecutionEntity, java.util.Map, java.lang.String)
   */
  @Override
  public void recordFormPropertiesSubmitted(ExecutionEntity processInstance, Map<String, String> properties, String taskId) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      for (String propertyId : properties.keySet()) {
        String propertyValue = properties.get(propertyId);
        getHistoricDetailEntityManager().insertHistoricFormPropertyEntity(processInstance, propertyId, propertyValue, taskId);
      }
    }
  }

  // Identity link related history
  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# recordIdentityLinkCreated (org.activiti.engine.impl.persistence.entity.IdentityLinkEntity)
   */
  @Override
  public void recordIdentityLinkCreated(IdentityLinkEntity identityLink) {
    // It makes no sense storing historic counterpart for an identity-link
    // that is related
    // to a process-definition only as this is never kept in history
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT) && (identityLink.getProcessInstanceId() != null || identityLink.getTaskId() != null)) {
      HistoricIdentityLinkEntity historicIdentityLinkEntity = getHistoricIdentityLinkEntityManager().create();
      historicIdentityLinkEntity.setId(identityLink.getId());
      historicIdentityLinkEntity.setGroupId(identityLink.getGroupId());
      historicIdentityLinkEntity.setProcessInstanceId(identityLink.getProcessInstanceId());
      historicIdentityLinkEntity.setTaskId(identityLink.getTaskId());
      historicIdentityLinkEntity.setType(identityLink.getType());
      historicIdentityLinkEntity.setUserId(identityLink.getUserId());
      getHistoricIdentityLinkEntityManager().insert(historicIdentityLinkEntity, false);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# deleteHistoricIdentityLink(java.lang.String)
   */
  @Override
  public void deleteHistoricIdentityLink(String id) {
    if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) {
      getHistoricIdentityLinkEntityManager().delete(id);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.activiti.engine.impl.history.HistoryManagerInterface# updateProcessBusinessKeyInHistory (org.activiti.engine.impl.persistence.entity.ExecutionEntity)
   */
  @Override
  public void updateProcessBusinessKeyInHistory(ExecutionEntity processInstance) {
    if (isHistoryEnabled()) {
      if (log.isDebugEnabled()) {
        log.debug("updateProcessBusinessKeyInHistory : {}", processInstance.getId());
      }
      if (processInstance != null) {
        HistoricProcessInstanceEntity historicProcessInstance = getHistoricProcessInstanceEntityManager().findById(processInstance.getId());
        if (historicProcessInstance != null) {
          historicProcessInstance.setBusinessKey(processInstance.getProcessInstanceBusinessKey());
          getHistoricProcessInstanceEntityManager().update(historicProcessInstance, false);
        }
      }
    }
  }

  @Override
  public void recordVariableRemoved(VariableInstanceEntity variable) {
    if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
      HistoricVariableInstanceEntity historicProcessVariable = getEntityCache()
          .findInCache(HistoricVariableInstanceEntity.class, variable.getId());
      if (historicProcessVariable == null) {
        historicProcessVariable = getHistoricVariableInstanceEntityManager()
            .findHistoricVariableInstanceByVariableInstanceId(variable.getId());
      }

      if (historicProcessVariable != null) {
        getHistoricVariableInstanceEntityManager().delete(historicProcessVariable);
      }
    }
  }

  protected String parseActivityType(FlowElement element) {
    String elementType = element.getClass().getSimpleName();
    elementType = elementType.substring(0, 1).toLowerCase() + elementType.substring(1);
    return elementType;
  }

  protected EntityCache getEntityCache() {
    return getSession(EntityCache.class);
  }

  public HistoryLevel getHistoryLevel() {
    return historyLevel;
  }

  public void setHistoryLevel(HistoryLevel historyLevel) {
    this.historyLevel = historyLevel;
  }

}

redpajama_set_name: RedPajamaGithub


How much does an Electrical Engineer make in Surrey, BC?
The average salary for an Electrical Engineer is $35,584 per year in Surrey, BC, which is 53% below the national average. Salary estimates are based on 11 salaries submitted anonymously to Indeed by Electrical Engineer employees, users, and collected from past and present job advertisements on Indeed in the past 36 months. The typical tenure for an Electrical Engineer is 1-3 years.


Japan, meanwhile, became the only nation to have experienced a nuclear attack when the U.S. dropped atomic bombs on Hiroshima and Nagaski killing an estimated 200,000-plus people at the end of WWII.
The vague wording of Music Station's statement that "as a program, wanted to ask him his mentality in wearing it" leaves it unclear as to whether producers merely wanted a behind-closed-doors discussion before agreeing to have BTS on the show, or whether they were demanding to be allowed to ask Jimin, live on air, about his wardrobe choice.
BTS member Jimin reportedly wore the shirt previous year, on Aug 15, when Koreans celebrate the end of Japanese occupation in 1945. It's said that the photos were taken on National Liberation Day of Korea in 2017, which marks the end of World War II, and by extension Japan's occupation of Korea.
This year, the BTS became the first K-pop band to win a Billboard Music Award; the first K-pop act to sell out a U.S. arena; and broke the record for biggest music video debut, a distinction previously held by Taylor Swift.
They are one of South Korea's best-known musical exports, becoming the first K-pop performers to top the US Billboard 200 with "Love Yourself: Tear". There have been reports of discomfort caused by a T-shirt one of the band's members previously wore.
The Tokyo-based TV Asahi said it has made a decision to call off their performance Friday night on its Music Station program after asking the band's agency about the member's intention in wearing the shirt.
The term K-pop refers to domestic popular music in South Korea, which can be influenced by any number of different styles and genres. The problem is not the relation between Japan and Korea.
BTS has said in a statement over the the row: "We apologise for disappointing fans who were looking forward to this".
Unsurprisingly, BTS fans are pretty unhappy with the news.
Universal Music said it will continue to support BTS but confirmed their appearance on the live music show "Music Station" was canceled.
Last month, Tokyo reacted furiously after South Korea's top court ordered a Japanese steel giant to compensate victims of wartime forced labor programs. "This group is making fun of the atomic bombings". This was followed by another bomb being dropped on Nagasaki on 9 August.
The Magenta carrier on Wednesday introduced a new "limited-time" offer for those looking to save even more money over Verizon. A $45 unlimited talk and text plan with 8GB of data each month replaced the old $50 plan that included 7GB of data.
Daniel Manrique was a native of Thousand Oaks and had served in Afghanistan with the Marine Corps, Task and objective reported . He said he thought their injuries were minor, and that majority were likely injured as they escaped, some by breaking windows.


text:
Q: Revesing matrix columns order in basic way in python I would like to invert the order of each matrix column as follows:
A = [[ 4,  8, 12, 16],
     [ 3,  7, 11, 15],
     [ 2,  6, 10, 14],
     [ 1,  5,  9, 13]]

The required result:
A = [[ 1,  5,  9, 13],
     [ 2,  6, 10, 14],
     [ 3,  7, 11, 15],
     [ 4,  8, 12, 16]]

As can be seen each column changed its order.
I use the following code for it:
B = [row[:] for row in A]

k = 0
for i in range(len(A), -1, -1):
    k = k + 1,
    for j in (range(len(A))):
        B[k, j] = A[i, j]

print(B)

However, I get the following error:
TypeError                                 Traceback (most recent call last)
<ipython-input-91-72c0a8d534ec> in <module>()
      9     k = k + 1,
     10     for j in range(len(A)):
---> 11         B[k, j] = A[i, j]
     12
     13 print(B)

TypeError: list indices must be integers or slices, not tuple

A: A is a nested list, not a numpy array. To flip it vertically, reverse the outer list:
A = A[::-1]

To make a full copy:
B = [list(row) for row in A[::-1]]

You can replace list(row) with row[:] or row.copy().
If you just want to do proper 2D indexing, you need to pass a separate index to each object in the nested structure:
B[k][j] = A[i][j]

The index [k, j] is really [(k, j)]. Numpy arrays can accept a tuple in their index, but list objects can not, as the error tells you. Instead, you need to access each sub-list separately. B[k] is a reference to a nested list, so you can assign an element to it with B[k][j] = ....
You may also want to be careful with how you construct your outer loop. The expression range(len(A), -1, -1) starts with len(A), which is out of bounds in your list (by definition). You probably want to use range(len(A) - 1, -1, -1).


The first drum fills collection from Vintage Breaks specialists Hal Ritson and Alex Reeves. Recorded as always in their enviable all-analogue studio, the result is 101 retro-flavoured fills to bring boring beats to life in any genre of electronic music.
Create your most engaging movies ever with VideoStudio Pro X8, the smart video editor that simplifies routine tasks and offers new creative possibilities. Get pro quality sound automatically with new Audio Ducking. Add unique effects with new overlay options, easy Freeze Frame and Video Masking. And make sure your videos look amazing with support for the latest 4K and HD standard, XAVC S.
Ambient White is the first of a linked pair of sound design-based virtual instruments designed to provide composers and producers with a collection of original instruments and textures suitable for all sorts of ambient music.
Hot on the heels of their successful FX series Soundbox have been hard at work in their full time professional studio producing this incredible follow up. Ladies and gentleman we welcome you to Killer FX Drops 3. An intense collection of mind-blowing risers, speaker-twisting drops, insane snare rolls and hand-raising FX make this pack an invaluable source for all your FX and breakdown needs.
Quicken WillMaker Plus is the easiest way to create your estate plan, whether its your first time or you want to update a previous plan. You will be guided through the process from beginning to end with practical and relevant legal information so you can make the best decisions for you and your family.
Trojan Remover aids in the removal of Malware - Trojan Horses, Worms, Adware, Spyware - when standard anti-virus software either fails to detect them or fails to effectively eliminate them. Standard antivirus programs are good at detecting this Malware, but not always good at effectively removing it. The majority of Anti-Malware Scanners are well able to detect malicious software - Trojan Horses, Internet Worms, Adware/Spyware etc. - but are not always efficient in removing them once they have been triggered.
Make Your Action-Videos Even Better - Remove Fisheye, Stabilize, De-Noise.and More! With ProDRENALIN, your raw action/sports videos can be quickly and easily refined into more stunning, professional looking productions using simple yet effective tools. If you shoot on a action cam, you need ProDRENALIN!
go1984 was designed for professional and problem-free video surveillance and recording. The easy to use video surveillance software with varied functions at an absolutely competitive price sets a new standard for the software industry. The function range of go1984 contains everything, which is required for professional video surveillance.
With a fresh look, new must-have tools and major feature enhancements, CorelDRAW Graphics Suite X7 opens up a world of new creative possibilities. We've designed several new workspaces that reflect your natural workflow, so that everything is right where you need it, when you need it. Whether you're creating graphics and layouts, editing photos or designing websites, this complete suite of graphic design software helps you design your way.