tag:blogger.com,1999:blog-25763417886091204032024-02-01T21:30:26.448-08:00Agile Making ProgressBack on the Front Line of Agile Software Development.John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.comBlogger33125tag:blogger.com,1999:blog-2576341788609120403.post-71119167753843502582017-12-18T08:00:00.000-08:002017-12-18T08:01:05.467-08:00Are you caught up with the real-time (r)evolution?<h1 itemprop="headline" style="-webkit-text-stroke-width: 0px; background-color: white; clear: both; color: #222222; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 900; letter-spacing: -0.5px; line-height: 49px; margin: 0px 0px 0.625rem; padding: 0.25rem 10px 0px 0px; position: relative; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: xx-small;"><b style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span lang="EN" style="background: none 0% 0% repeat scroll white; color: #222222; line-height: 14.95px;"><span>This post originally appeared on<span><span> </span></span><a href="https://www.infoworld.com/article/3239525/analytics/are-you-caught-up-with-the-real-time-revolution.html" style="color: #888888; text-decoration: none;">InfoWorld on December 1, 2017</a>.</span></span></b></span></span></h1>
<h2 itemprop="headline" style="-webkit-text-stroke-width: 0px; background-color: white; clear: both; color: #222222; font-size: 40px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 900; letter-spacing: -0.5px; line-height: 49px; margin: 0px 0px 0.625rem; padding: 0.25rem 10px 0px 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial, Helvetica, sans-serif;">Are you caught up with the real-time (r)evolution?</span></h2>
<section class="deck viewability" style="-webkit-text-stroke-width: 0px; background-color: white; color: black; display: block; float: none; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; width: auto; word-spacing: 0px;"><h3 itemprop="description" style="clear: left; color: #222222; font-size: 1.625rem; font-weight: 300; line-height: 1.875rem; margin: 0px; padding: 0px 10px 0px 0px;">
<span style="font-family: Arial, Helvetica, sans-serif;">Real-time analytics have been around since well before computers. Here's where the evolution of real time is headed in 2018</span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: black;"><span style="-webkit-text-stroke-width: 0px; background-color: white; display: inline !important; float: none; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> </span></span></span></span><br /><span style="font-family: Arial, Helvetica, sans-serif;"></span></h3>
</section><div class="cat-social" style="-webkit-text-stroke-width: 0px; background-color: white; clear: left; float: none; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; margin: 5px 0px 10px; max-width: 620px; position: relative; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; z-index: 2;">
<div class="cat sidecar show blog" id="sharer" style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 0px none; float: none; font-size: 1.375rem; left: 0px; line-height: normal; opacity: 1; position: relative; top: 0px; transition: opacity 0.5s ease 0s; width: auto;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="font-size: large;">People often think of “real time” as a new concept, but the need for real-time notification and decisioning has been around forever. <a href="https://www.gartner.com/it-glossary/real-time-analytics">Gartner</a> defines real-time analytics as “the discipline that applies logic and mathematics to data to provide insights for making better decisions quickly.” This definition has always held true, it is just the meaning and measurement of real time that has evolved. As we approach the end of 2017, it’s a good time to look at the evolution of real-time decision making and ask yourself—are you caught up?</span><span style="color: black;"><span style="-webkit-text-stroke-width: 0px; background-color: white; display: inline !important; float: none; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"></span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: black;"><span style="-webkit-text-stroke-width: 0px; background-color: white; display: inline !important; float: none; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"></span></span></span></span></div>
<div class="cat sidecar show blog" id="sharer" style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 0px none; float: none; font-size: 1.375rem; left: 0px; line-height: normal; opacity: 1; position: relative; top: 0px; transition: opacity 0.5s ease 0s; width: auto;">
<h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 1.8rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 1.2em; margin: 1.625rem 0px 16px; max-width: 620px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial, Helvetica, sans-serif;">Real time B.C. (before computers)</span><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"></span></span><br /><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"></span></span></h2>
<span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;">Before there were computers, people were finding ways to use real-time information. For instance, in 500 BC, Philippides ran 25 miles from Marathon to Athens, Greece, to alert the magistrates of the victory at the Battle at Marathon, and in 200 BC, smoke signals were used on the Great Wall of China to warn those further down the wall of enemy size and attack direction.<br /><br />Fast-forward to 1775 when Paul Revere developed a real-time alerting system using lanterns. We all know the famous phrase “one if by land, two if by sea,” and after initiating this real-time alert, he rode on horseback to deliver the information to towns around Boston along with 40 other horseback riders to spread the word throughout eastern Massachusetts. </span></span><h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 1.8rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 1.2em; margin: 1.625rem 0px 16px; max-width: 620px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial, Helvetica, sans-serif;">Real-time A.D. (after digital)</span><span style="font-family: Arial, Helvetica, sans-serif;"></span><span style="font-size: large;"><br /><span style="font-family: Arial, Helvetica, sans-serif;"></span></span></h2>
<span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;"> With the invention of computers, we upgraded from “human speed” to “machine speed.” For example, telephone call routing was initially executed by human switchboard operators, but by 1983, computers automated this process, enabling real-time voice communication for almost everyone.<br /><br />People also began interacting with real-time systems, typically through an intermediary. The stock market is a good example—if you wanted to buy or sell securities, you had to make a phone call to your stockbroker who would execute the trade on your behalf using the real-time stock exchange trading software.<br /><br />From an organizational standpoint, computers enabled companies to gather transactions into a database and produce monthly, weekly or even daily reports. At this early stage, nightly batch processing of data was generally viewed as “real-time data.”</span></span><h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 1.8rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 1.2em; margin: 1.625rem 0px 16px; max-width: 620px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial, Helvetica, sans-serif;">Today in real time</span></h2>
<span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;">Every day most of us interact with real-time systems and execute real-time decisions, possibly without even realizing it. For instance, going back to our stock example, trades can be executed in seconds by the consumer without a broker.<br /><br />Take credit card fraud as another example. What was previously fraud detection has evolved into fraud prevention thanks to advancements in real-time technology, and preventing the unauthorized transaction from being processed can save corporations millions of dollars.<br /><br />Smartphones have helped advance the capabilities of real-time processing thanks to the personalized data they can ingest. Tracking the location of consumers in real time allows companies to deliver personalized offers based on what they are close to. Mobile traffic applications like Waze provide real-time incident alerts and traffic updates to redirect drivers to the fastest route.</span></span><h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 1.8rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 1.2em; margin: 1.625rem 0px 16px; max-width: 620px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial, Helvetica, sans-serif;">Tomorrow in real time</span><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"></span></span><br /><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"></span></span></h2>
<span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;">We are witnessing the commoditization of real-time information, alerts, and decisions, and these capabilities will proliferate across all application domains, including online gaming, casino gaming, financial compliance and risk, fraud prevention, digital ad technology, telecom policy and billing, and more.<br /><br />As we look ahead to 2018, we’ll see real-time advancements in the following areas:</span><span style="font-family: Arial, Helvetica, sans-serif;"></span><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></span><ul>
<li><span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;">Self-driving cars will process data from countless sensors and ultimately get passengers to their destinations safely and efficiently, saving thousands of lives a year in the process.</span></span></li>
<li><span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;">Real-time threat detection and remedy for data security breaches and DDoS attacks will alert consumers as they occur.</span></span></li>
<li><span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;">Wearable health sensors (they already exist in your smartwatch) will not only monitor health statistics, but will also combine that telemetry with personal medical history to know when and how to notify doctors if necessary.</span><span style="font-family: Arial, Helvetica, sans-serif;"></span></span></li>
<li><span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;">Augmented reality will become part of our everyday lives. When traveling in a foreign country, AR on cell phones and tablets will provide “live” translations of street signs and shops and integrate reviews, recommendations and advertisements on whatever signposts or buildings you scan.</span><span style="font-family: Arial, Helvetica, sans-serif;"></span></span></li>
</ul>
<span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;">The value of real time is the ability to make decisions as soon as possible based on the most readily available information. Information that used to take days to receive can now be ingested and analyzed in fractions of a second, and 2018 will only cut that time down even more, empowering companies to leverage real-time information to increase corporate profit, protect resources and even save lives.</span></span><div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; word-spacing: 0px;">
<br /></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="color: black;"><span style="-webkit-text-stroke-width: 0px; background-color: white; display: inline !important; float: none; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> </span></span></span></div>
</div>
John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-23243436305085654022017-11-16T11:00:00.000-08:002017-11-16T11:00:01.934-08:00Real-Time Computing: 4 Sources of Latency And How To Avoid Them<h1 itemprop="headline" style="-webkit-text-stroke-width: 0px; background-color: white; clear: both; color: #222222; font-family: museo-sans; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 900; letter-spacing: -0.5px; line-height: 49px; margin: 0px 0px 0.625rem; orphans: 2; padding: 0.25rem 10px 0px 0px; position: relative; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-size: xx-small;"><b style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span lang="EN" style="background: none 0% 0% repeat scroll white; color: #222222; line-height: 14.95px;"><span style="font-family: arial, helvetica, sans-serif;"><span>This post originally appeared on<span><span> </span></span><a href="https://www.infoworld.com/article/3235340/developer/4-sources-of-latency-and-how-to-avoid-them.html" style="color: #888888; text-decoration: none;">InfoWorld on November 1, 2017</a>.</span></span></span></b></span> </h1>
<h2 itemprop="headline" style="-webkit-text-stroke-width: 0px; background-color: white; clear: both; color: #222222; font-family: museo-sans; font-size: 40px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 900; letter-spacing: -0.5px; line-height: 49px; margin: 0px 0px 0.625rem; orphans: 2; padding: 0.25rem 10px 0px 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
4 sources of latency and how to avoid them</h2>
<section class="deck viewability" style="-webkit-text-stroke-width: 0px; background-color: white; color: black; display: block; float: none; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin-bottom: 15px; margin-top: 15px; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; width: auto; word-spacing: 0px;"><h3 itemprop="description" style="clear: left; color: #222222; font-family: museo, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.625rem; font-weight: 300; line-height: 1.875rem; margin: 0px; padding: 0px 10px 0px 0px;">
Even Google and Amazon can’t process data instantly—here’s how to combat latency in your real-time application</h3>
<h3 itemprop="description" style="clear: left; color: #222222; font-family: museo, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.625rem; font-weight: 300; line-height: 1.875rem; margin: 0px; padding: 0px 10px 0px 0px;">
</h3>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Despite all the advances we’ve seen in data processing and database technology, there is no escaping data’s Public Enemy No. 1: latency, the time delay before a response is generated and returned. Even Gartner’s<span> </span><a href="https://www.gartner.com/it-glossary/zle-zero-latency-enterprise" rel="nofollow" style="color: #ef4c23; text-decoration: none;">definition</a><span> </span>of a zero-latency enterprise acknowledges that latency can never actually be zero because computers need time to “think.” </div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
While you may never truly achieve zero latency, the goal is always to deliver information in the shortest amount of time possible, so ensuring predictable, low latency processing is key when building a real-time application. Often the hardest part, though, is identifying the sources of latency in your application and subsequently eliminating them. If you can’t remove them entirely, there are steps you can take to reduce or manage their consequences. </div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Before, during, and after computing the response, there are number of areas that can add unwanted latency. Below are some common sources and tips for minimizing their impact.</div>
<h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.8rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 2.1rem; margin: 1.625rem 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Network I/O</h2>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Most applications use the network in some manner, whether between the client application and the server or between server-side processes and applications. The important thing to know here is that distance matters—the closer your client is to the server, the lower the network latency. For instance, round-trip latency between nodes within the same datacenter can cost 500 microseconds, while it can be an additional 50 milliseconds for nodes in California and New York.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
What to do:</div>
<ul style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px 0px 0px 2.5rem; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Use faster networking, such as better network interface cards and drivers and 10GigE networking.</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Eliminate network hops. In clustered queuing and storage systems, data can be horizontally scaled across many host machines, which can help you avoid extra network round-trip connections.</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Keep client and server processes close together, ideally within the same datacenter and on the same physical network switch.</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">If your application is running in the cloud, keep all processing in one availability zone.</li>
</ul>
<br class="Apple-interchange-newline" /><h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.8rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 2.1rem; margin: 1.625rem 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Disk I/O</h2>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Many real-time applications are data intensive, requiring some sort of database to service the real-time request. Databases, even in-memory databases, make data durable by storing it to persistent storage, but for high-velocity real-time applications, making data durable can add significant unwanted latency, and disk I/O, like network I/O, is costly. Accessing memory can be upwards of 10,000x faster than a single disk seek.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
What to do:</div>
<ul style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px 0px 0px 2.5rem; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Avoid writing to disk. Instead use write-through caches or in-memory databases or grids (modern in-memory data stores are optimized for low latency and high read/write performance).</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">If you do need to write to disk, combine writes where possible, especially when using fsync. The goal is to optimize algorithms to minimize the impact of disk I/O. Consider asynchronous durability as a way to avoid stalling main line processing with blocking I/O.</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Use fast storage systems, such as SSDs or spinning disks with battery-backed caches.</li>
</ul>
<h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.8rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 2.1rem; margin: 1.625rem 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
The operating environment</h2>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
The operating environment in which you run your real-time application—on shared hardware, in containers, in virtual machines, or in the cloud—can significantly impact latency.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
What to do:</div>
<ul style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px 0px 0px 2.5rem; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Run your application on dedicated hardware so other applications can’t inadvertently consume system resources and impact your application’s performance.</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Be wary of virtualization—even on your own dedicated hardware, hypervisors impose a layer of code between your application and the operating system. When configured properly, performance degradation can be minimized, but your application is still running in a shared environment and may be impacted by other applications on the physical hardware.</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Understand the nuances of the programming language environment used by your application. Some languages, such as Java and Go, use automatic memory management and use periodic garbage collection to reclaim unused memory. The processing impact of garbage collection can be unpredictable and introduce unwanted latency at seemingly random times.</li>
</ul>
<h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.8rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 2.1rem; margin: 1.625rem 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Your code</h2>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
When it comes to coding, there are some common core functionalities that can pose barriers to speed.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
What to do:</div>
<ul style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px 0px 0px 2.5rem; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Inefficient algorithms are the most obvious sources of latency in code. When possible, look for unnecessary loops or nested expensive operations in code—restructuring loops and caching expensive computation results usually help.</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Multi-threaded locks stall processing and thus introduce latency. Use design patterns that avoid locking, especially when writing server-side applications.</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Blocking operations cause long wait times, so use an asynchronous (non blocking) programming model to better utilize hardware resources, such as network and disk I/O.</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Unbounded queues may sound counter-intuitive, but these lead to unbounded hardware resource usage, which no computer has. Limiting the queue depths and providing back pressure typically lead to less wait time in your code resulting in more predictable latencies.</li>
</ul>
<h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.8rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 2.1rem; margin: 1.625rem 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Combating the enemy</h2>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Building real-time applications requires that the application developer not only write efficient code, but to also understand the operating environment and hardware constraints of the systems on which your application will be deployed. Provisioning the fastest networking equipment and the fastest CPUs won’t singularly solve your real-time latency requirements.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Thoughtful application architecture, efficient software algorithms and optimal hardware operating environment are all key considerations for fighting latency.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
<br /></div>
<h3 itemprop="description" style="clear: left; color: #222222; font-family: museo, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.625rem; font-weight: 300; line-height: 1.875rem; margin: 0px; padding: 0px 10px 0px 0px;">
</h3>
</section>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-27006286046714606032017-10-17T09:59:00.000-07:002017-10-17T09:59:17.859-07:00What real-time application pattern works for you?<h1 itemprop="headline" style="-webkit-text-stroke-width: 0px; clear: both; color: #222222; font-family: museo-sans; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 900; letter-spacing: -0.5px; line-height: 49px; margin: 0px 0px 0.625rem; orphans: 2; padding: 0.25rem 10px 0px 0px; position: relative; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-size: x-small;"><b style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span lang="EN" style="background: none 0% 0% repeat scroll white; color: #222222; line-height: 14.95px;"><span style="font-family: arial, helvetica, sans-serif;"><span>This post originally appeared on<span><span> </span></span><a href="https://www.infoworld.com/article/3228528/database/what-real-time-application-pattern-works-for-you.html" style="color: #888888; text-decoration: none;">InfoWorld on September 27, 2017</a>. </span></span></span></b></span></h1>
<h2 itemprop="headline" style="-webkit-text-stroke-width: 0px; background-color: white; clear: both; color: #222222; font-family: museo-sans; font-size: 40px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 900; letter-spacing: -0.5px; line-height: 49px; margin: 0px 0px 0.625rem; orphans: 2; padding: 0.25rem 10px 0px 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
What real-time application pattern works for you?</h2>
<h3 itemprop="description" style="-webkit-text-stroke-width: 0px; background-color: white; clear: left; color: #222222; font-family: museo, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.625rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; line-height: 1.875rem; margin: 0px; orphans: 2; padding: 0px 10px 0px 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<br /></h3>
<h3 itemprop="description" style="-webkit-text-stroke-width: 0px; background-color: white; clear: left; color: #222222; font-family: museo, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.625rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; line-height: 1.875rem; margin: 0px; orphans: 2; padding: 0px 10px 0px 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
3 common real-time application patterns that require a real-time decision</h3>
<h3 itemprop="description" style="-webkit-text-stroke-width: 0px; background-color: white; clear: left; color: #222222; font-family: museo, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.625rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; line-height: 1.875rem; margin: 0px; orphans: 2; padding: 0px 10px 0px 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</h3>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
At first glance, building a<span> </span><em>real-time application</em><span> </span>may sound like a daunting proposition, one that involves technical challenges as well as a significant financial investment, especially when you have an application goal of responding within a fraction of a second. But advances in hardware, networking, and software—both commercial as well as open source—make building real-time applications today very achievable. So what do these real-time applications look like?</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
This article presents three common real-time application patterns that require a real-time decision, meaning a response returned or transaction executed based on real-time input. To determine which pattern to apply to your application, you must first define your real-time objective. Ask yourself: How fast does the application need to respond?</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Each application pattern addresses a particular level of real-time response: sub-millisecond, milliseconds, or 100 milliseconds and greater.</div>
<h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.5rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 1.8rem; margin: 1.625rem 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Pattern 1: Embedded applications—delivering responses in sub-milliseconds</h2>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
To achieve sub-millisecond response, you need to eliminate any server-side networking and embed your application onto a computer or hardware appliance. This is the bleeding edge of real-time processing for more specialized applications that are not very common. This pattern is relevant for areas such as high frequency trading applications, nuclear power plant systems and signal processing and sensor applications.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; display: inline !important; float: none; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Delivering sub-millisecond responses involves low-level programming, often at the kernel level. Standard kernels, operating systems, and device drivers can add unwanted processing overhead resulting in extra latency. Applications that care about every microsecond or nanosecond, every clock cycle, should seek to eliminate this overhead and code directly on the hardware. Alternatively, if you can withstand some additional latency, you can forgo writing low-level code and build and run your application directly on the operating system, embedding a data store such as SQLite, if needed.</span></div>
<h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.5rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 1.8rem; margin: 1.625rem 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Pattern 2: High speed OLTP—delivering responses in milliseconds</h2>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
This is the classic client-server OLTP application architecture where a client application talks to a server-side application and database. These applications are very common — you have likely interacted with them several times today without even realizing it. These applications detect credit card fraud, compute personalized webpages, and deliver optimized digital ads. For instance, when you use your iPhone or Android phone to make a call, run an app, or access the internet, several decisions (transactions) must be made by the telco provider before your action is allowed to occur: Is your account valid? Do you have enough quota (voice or data)? What policy should apply to the action (throttling etc.)? And each transaction must respond in milliseconds.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Optimizing network performance between the client application and the server allows for low-latency responses for high-speed OLTP application patterns. Low-cost gigabit ethernet (GigE) and relatively low-cost 10GigE networking is readily available to most application developers. Network performance can be further optimized by keeping the application on the same network switch or rack as the server or minimally on the same LAN. In other words, keep the client and server in close proximity. Within the server, the application and database usually minimize blocking disk I/O, either by avoiding it completely, by applying sequential I/O, or by using advanced storage such as SSDs or the newly emerging non-volatile RAM.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
One additional point worth noting is that with next generation in-memory data stores and caches, it is even possible to achieve low single-digit millisecond latency with highly available clustered data stores; that is, databases and systems spanning multiple nodes or processes. Today, many shared-nothing, in-memory databases, data grids, and NoSQL stores offer highly available data stores with predictable low latency (often single-digit millisecond) response times.</div>
<h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.5rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 1.8rem; margin: 1.625rem 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Pattern 3: Streaming fast data pipelines—delivering responses in seconds</h2>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
A fast data pipeline, historically rooted in complex event processing (CEP) applications, is becoming a more broadly deployed real-time application pattern today. In this application pattern, a never-ending stream of immutable events is being ingested with real-time analytics applied.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Typical applications have a queuing or streaming system that delivers events, ultimately feeding the data lake, managed by Hadoop, Spark, or a data warehouse. Before arriving at the historical archive, the event stream is processed by a fast data store or computational engine. It is the role of this engine to aggregate, dedupe, and compute real-time analytics on incoming events and generate real-time alerts or decisions as required. The analytics are often displayed on a dashboard, and alerts or decisions are generated. A person or business process reacts to the alert, in human speed. A few seconds is often enough time to ensure any late data has arrived to inform the decision.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
In this pattern, data flows in one direction. This real-time engine often holds a predetermined amount of “hot data,” either in the form of continuously computed analytics or a database of the last hour, day, or week’s worth of data. Older data is delivered to the historic data lake or data warehouse.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Advances in queuing systems like Kafa, in-memory databases, data grids, and NoSQL data stores make implementing this pattern possible. This pattern has broad usage across the internet of things (IoT), electric smart grids, log file management, and mobile in-game analytic processing, among others. We’ll be seeing more of this pattern in future applications.</div>
<h2 style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.5rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 1.8rem; margin: 1.625rem 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
The age of real time is now</h2>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
If you are just starting out with your real-time application, first consider what response rate your problem domain requires. If it requires sub-millisecond response, consider an embedded application. If your application is high-velocity OLTP, explore high-performance network configurations and new offerings in low-latency data store and in-memory database technology. If you need to handle relentless streams of data, consider a fast data-pipeline architecture.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
Low-cost computing, readily accessible high-speed networking, and numerous open source and commercial data storage software offerings capable of low-latency data processing means that real-time applications are no longer out of reach.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; transition: margin 0.3s ease 0s; white-space: normal; widows: 2; word-spacing: 0px;">
<br /></div>
<h3 itemprop="description" style="-webkit-text-stroke-width: 0px; background-color: white; clear: left; color: #222222; font-family: museo, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.625rem; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; line-height: 1.875rem; margin: 0px; orphans: 2; padding: 0px 10px 0px 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</h3>
John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-55481375114272793232017-09-14T07:52:00.000-07:002017-09-14T07:52:06.916-07:00<span style="font-size: small;"><br /></span><header class="cat" style="-webkit-text-stroke-width: 0px; background-color: white; clear: both; color: black; display: block; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin: 0px 0px 0.9375rem; orphans: 2; padding-top: 0.125rem; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><h1 itemprop="headline" style="clear: both; color: #222222; font-family: museo-sans; font-style: normal; font-weight: 900; letter-spacing: -0.5px; line-height: 49px; margin: 0px 0px 0.625rem; padding: 0.25rem 10px 0px 0px; word-spacing: 0px;">
<span style="font-size: small;"><b style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-family: Arial,Helvetica,sans-serif; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span lang="EN" style="background: white none repeat scroll 0% 0%; color: #222222; line-height: 14.95px;"><span style="font-family: arial,helvetica,sans-serif;"><span>This post originally appeared on<span> </span><a href="https://www.infoworld.com/article/3220430/analytics/measuring-real-time.html">InfoWorld on August 28, 2017</a>. </span></span></span></b></span></h1>
<h1 itemprop="headline" style="clear: both; color: #222222; font-family: museo-sans; font-size: 40px; font-style: normal; font-weight: 900; letter-spacing: -0.5px; line-height: 49px; margin: 0px 0px 0.625rem; padding: 0.25rem 10px 0px 0px; word-spacing: 0px;">
<b style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-family: Arial, Helvetica, sans-serif; font-size: small; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span lang="EN" style="background: none 0% 0% repeat scroll white; color: #222222; line-height: 14.95px;"><span style="font-family: arial, helvetica, sans-serif;"><span style="font-size: xx-small;"> </span></span></span></b>Measuring real-time</h1>
<section class="deck viewability" style="display: block; float: none; margin-bottom: 15px; margin-top: 15px; width: auto;"><h3 itemprop="description" style="clear: left; color: #222222; font-family: museo, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.625rem; font-weight: 300; line-height: 1.875rem; margin: 0px; padding: 0px 10px 0px 0px;">
I explore the different types of real-time applications and how real-time is measured based on the application need</h3>
</section></header><section class="epo cat-narrow" id="drr-top-ad" style="-webkit-text-stroke-width: 0px; background-color: white; clear: right; color: black; display: block; float: right; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin: 0px 0px 10px 35px; orphans: 2; position: relative; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; width: 300px; word-spacing: 0px; z-index: 1;"><div class="apart ad lazyload_ad_article" style="background: 0px center transparent; border-bottom: 0px; border-top: 0px; clear: right; display: block; float: none; margin: 0px 0px 10px; min-height: 250px; padding: 0px; text-align: center; width: auto;">
<code style="font-family: monospace, serif; font-size: 1em;" type="text/javascript"></code></div>
<div class="apart ad lazyload_ad_article" style="background: 0px center transparent; border-bottom: 0px; border-top: 0px; clear: right; display: block; float: none; margin: 0px 0px 10px; min-height: 250px; padding: 0px; text-align: center; width: auto;">
<code style="font-family: monospace, serif; font-size: 1em;" type="text/javascript"></code></div>
</section><section class="bodee" style="-webkit-text-stroke-width: 0px; background-color: white; clear: left; color: black; display: block; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin-bottom: 20px; orphans: 2; position: relative; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="cat " id="drr-container" itemprop="articleBody" style="margin: 0px 0px 16px; max-width: 620px; padding: 0px;">
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
The term “real-time” is thrown around a lot these days, but it’s a buzzword that is often surrounded by ambiguity. Every day, it seems a new product is announcing its real-time capability. But how is<span> </span><em>real-time</em><span> </span>measured? It certainly isn’t measured in days (or even hours)—so is it measured in:</div>
<ul style="font-size: 1.125rem; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px 0px 0px 2.5rem; transition: margin 0.3s ease 0s;">
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Nanoseconds?</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Microseconds?</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Milliseconds?</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Seconds?</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">Minutes?</li>
<li style="color: #4e4242; list-style-position: outside; margin: 0px 0px 0.5rem; max-width: 620px; padding: 0px;">All of the above?</li>
</ul>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
Everyone, from developers to software corporate marketing departments to even consumers, seems to have a slightly different answer. So let’s explore the question “What does ‘real-time’ really mean?”</div>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
Let’s begin with the dictionary definition:</div>
<blockquote style="border-left: 5px solid rgb(239, 239, 239); font-size: 1.0625rem; font-weight: 400; margin: 0px 0px 16px; max-width: 620px; padding: 5px 20px;">
Real-time—<em>“of or relating to applications in which the computer must respond as rapidly as required by the user or necessitated by the process being controlled.”</em></blockquote>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
While this definition continues with the subjective theme, it does confirm that the correct answer to how to measure real-time is “All of the above.” The meaning of the term<span> </span><em>real-time</em><span> </span>varies based on application need—the amount of time a computer (the application) takes to respond and the acceptable latency is as fast as required by the problem domain.</div>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
Rather than look at applications and determine if they are real-time or not, let’s examine various time units and understand the types of real-time applications that require those response rates:</div>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
<strong style="font-weight: bold;">Nanoseconds: </strong>A nanosecond (ns) is one billionth of a second. Admiral Grace Hopper famously explained a nanosecond using an 11.8-inch wire, as that is the maximum distance electricity can travel in one nanosecond. This quick<span> </span><a href="https://www.youtube.com/watch?v=JEpsKnWZrJ8" rel="nofollow" style="color: #ef4c23; text-decoration: none;">video</a><span> </span>of Hopper is worth watching if you haven’t yet seen it.</div>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
With this in mind, it is easy to see why nanoseconds are the unit used to measure the speed of hardware, such as the time it takes to access computer memory. Worrying about nanosecond latency is at the bleeding edge of real-time computing and is primarily driven by innovation with hardware and networking technology.</div>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
<strong style="font-weight: bold;">Microseconds: </strong>A microsecond (µs) is one millionth of a second. Real-time applications that worry about microsecond latency are high-frequency trading (HFT) applications. Financial trading firms spend large sums of money investing in the latest networking and computer hardware to eliminate microseconds of latency within their trading platforms. A trading decision has to be made in as few microseconds as possible in order to execute ahead of competition and thus maximize profit.<strong style="font-weight: bold;"> </strong></div>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
<strong style="font-weight: bold;">Milliseconds: </strong>A millisecond (ms) is one one-thousandth of a second. To put this in context, the speed of a human eye blink is 100 to 400 milliseconds, or between a 10th and half of a second. Network performance is often measured in milliseconds. Real-time applications that worry about latency in milliseconds include telecom applications, digital ad networks, and self-driving cars. The decision on what optimal ad to display or whether there is enough balance to let a cellphone call proceed must be made on the order of 100 milliseconds.</div>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
<strong style="font-weight: bold;">Seconds: </strong>We’re starting slow down here. We’re still in the realm of real-time, but we are now venturing into<span> </span><em>near real-time.<span> </span></em>Sub-minute processing time is often more than good enough for applications that process log files, computing analytics on event streams, as well as alerting applications. These real-time applications drive actions and decisions that are made in human-reaction time rather than machine-time. Reducing the response time by one tenth of a second (100ms), which may be costly to implement, has no change in value for the application.</div>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
<strong style="font-weight: bold;">Minutes:</strong><span> </span>Waiting minutes may seem like an eternity to a high-frequency trading application. However, consider package shipment and delivery alerts or ecommerce stock availability notifications. Those applications certainly feel real-time to me—the fact that I receive a “delivery notification” text message within 10 minutes of a delivery made to my home is very satisfying.</div>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
Finally, though I discounted it up front, let’s briefly consider<span> </span><strong style="font-weight: bold;">hours and days</strong>. While this time range is generally not regarded as true real-time, if you’ve been getting finance or sales reports on a monthly, weekly, or daily basis, and now you can get up-to-date reports every hour, that may be as real-time as you need. The modernization of these applications is often termed as upgrading from “batch” to “real-time.”</div>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
The old proverb is correct: Time is money. Throughout history, the ability to make real-time decisions has meant the difference between life and death, between profit and loss. The value of time has never been higher and therefore speed has never been more critical to business applications of all kinds.</div>
<div style="color: #4e4242; font-family: museo-sans, "Helvetica Neue", Helvetica, Arial, sans-serif, sans-serif; font-size: 1.125rem; font-weight: 500; line-height: 1.875rem; margin: 0px 0px 16px; max-width: 620px; padding: 0px; transition: margin 0.3s ease 0s;">
Luckily, we live in an age where fast computing is very affordable and making decisions in real-time is economically achievable for most applications. The first step is determining the appropriate definition of real-time that aligns with the needs of your business applications.</div>
</div>
</section>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com1tag:blogger.com,1999:blog-2576341788609120403.post-20769591381364603112017-08-11T09:39:00.006-07:002017-08-11T09:39:56.278-07:00Fast Data Pipeline Design: Updating Per-Event Decisions by Swapping Tables<h1 class="entry-title mkd-post-title" itemprop="name" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; font-size: 35px; font-weight: 500; line-height: 1.2em; margin: 34px 0px 13px; outline: 0px none; padding: 0px; vertical-align: baseline;">
<span style="font-family: Arial,Helvetica,sans-serif;">Fast Data Pipeline Design: Updating Per-Event Decisions by Swapping Tables</span></h1>
<div class="indent" style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<div style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; margin: 10px 0px; outline: 0px none; padding: 0px; vertical-align: baseline;">
<span style="font-family: Arial,Helvetica,sans-serif;">VoltDB was one of the first companies to enable a new modern breed of applications, applications that combine streaming, or “fast data”, tightly with big data.We call these applications<span> </span><span style="color: black;"><a href="https://www.voltdb.com/files/ebook-fast-data-smart-scale/" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; cursor: pointer; margin: 0px; outline: 0px none; padding: 0px; text-decoration: none; transition: color 0.15s ease-out 0s; vertical-align: baseline;">Fast Data Pipelines.</a></span></span></div>
<div style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; margin: 10px 0px; outline: 0px none; padding: 0px; vertical-align: baseline;">
<span style="font-family: Arial,Helvetica,sans-serif;">First, a quick high-level summary of the fast data pipeline architecture:</span></div>
</div>
<div style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; margin: 10px 0px; outline: 0px none; padding: 0px; vertical-align: baseline;">
<span style="font-family: Arial,Helvetica,sans-serif;"><img alt="Fast Data Pipeline" class="wp-image-9528 size-full aligncenter" height="478" src="https://www.voltdb.com/wp-content/uploads/2017/06/Fast-Data-Pipeline-2.png" style="display: block; height: auto; margin: 10px auto; max-width: 100%;" title="Fast Data Pipeline" width="900" /></span></div>
<div class="indent" style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; outline: 0px none; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; outline: 0px none; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial,Helvetica,sans-serif;">The first thing to notice is that there is a tight coupling of Fast and Big, although they are separate systems. They have to be, at least at scale. The database system designed to work with millions of event decisions per second is wholly different from the system designed to hold petabytes of data and generate Machine Learning (ML) models.</span></div>
<div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; outline: 0px none; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial,Helvetica,sans-serif;">There are a number of critical requirements to get the most out of a fast data pipeline. These include the ability to:</span></div>
<ul style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; list-style-position: inside; margin: 15px 0px; outline: 0px none; padding: 0px 0px 0px 20px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; word-spacing: 0px;">
<li style="background: 0px 0px; border: 0px; list-style-position: inside; list-style-type: disc; margin: 0px; outline: 0px; padding: 0px 0px 0px 30px; text-indent: -2em; vertical-align: baseline;"><span style="font-family: Arial,Helvetica,sans-serif;">Ingest / interact with the data feed in real-time.</span></li>
<li style="background: 0px 0px; border: 0px; list-style-position: inside; list-style-type: disc; margin: 0px; outline: 0px; padding: 0px 0px 0px 30px; text-indent: -2em; vertical-align: baseline;"><span style="font-family: Arial,Helvetica,sans-serif;">Make decisions on each event in the feed in real time</span></li>
<li style="background: 0px 0px; border: 0px; list-style-position: inside; list-style-type: disc; margin: 0px; outline: 0px; padding: 0px 0px 0px 30px; text-indent: -2em; vertical-align: baseline;"><span style="font-family: Arial,Helvetica,sans-serif;">Provide visibility into fast-moving data with real-time analytics</span></li>
<li style="background: 0px 0px; border: 0px; list-style-position: inside; list-style-type: disc; margin: 0px; outline: 0px; padding: 0px 0px 0px 30px; text-indent: -2em; vertical-align: baseline;"><span style="font-family: Arial,Helvetica,sans-serif;">Seamlessly integrate into the systems designed to store Big Data</span></li>
<li style="background: 0px 0px; border: 0px; list-style-position: inside; list-style-type: disc; margin: 0px; outline: 0px; padding: 0px 0px 0px 30px; text-indent: -2em; vertical-align: baseline;"><span style="font-family: Arial,Helvetica,sans-serif;">Ability to deliver analytic results (mined “knowledge”) from the Big Data systems quickly to decision engine, closing the data loop. This mined knowledge can be used to inform per event decisions.</span></li>
</ul>
<div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; outline: 0px none; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial,Helvetica,sans-serif;">Hundreds of Fast Data Pipeline applications have been built and deployed using VoltDB as the fast operational database (the glue) between Fast and Big. These applications provide<span> </span><span style="color: black;"><a href="https://www.voltdb.com/why-voltdb/real-time-decision-engine/" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; cursor: pointer; margin: 0px; outline: 0px none; padding: 0px; text-decoration: none; transition: color 0.15s ease-out 0s; vertical-align: baseline;">real-time decisioning</a>engines in financial fraud detection, digital ad tech optimization, electric smart grid, mobile gaming and IoT industries, among others.</span></span></div>
<div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; outline: 0px none; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial,Helvetica,sans-serif;">This blog is going to drill into how to implement a specific portion of this<span> </span><span style="color: black;"><a href="https://www.voltdb.com/why-voltdb/streaming-data-pipeline/" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; cursor: pointer; margin: 0px; outline: 0px none; padding: 0px; text-decoration: none; transition: color 0.15s ease-out 0s; vertical-align: baseline;">fast data pipeline</a>, namely the last bullet:<span> </span><i style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">the ability to close the data loop, taking knowledge from a Big Data system and applying this knowledge, online, to the real-time decision engine (VoltDB).</i></span></span></div>
<h2 style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-size: 27px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.2em; margin: 25px 0px; outline: 0px none; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial,Helvetica,sans-serif;">Closing the Data Loop</span></h2>
<span style="font-family: Arial,Helvetica,sans-serif;"><b id="docs-internal-guid-2f7f1a7e-d228-8673-52f9-d264ed4626cf" style="font-weight: normal;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“Per-event decisioning” means that an action is computed for each incoming event (each transaction). Usually some set of facts informs the decision, often computed from historical data. These “facts” could be captured in machine learning models or consist of a set of generated rules to be executed on each incoming event. Or these facts could represented as rows in a database table, used to filter and generate optimized decisions for each event. This blog post will focus in on the latter, storing and updating facts represented in database tables. </span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">When storing facts in database tables, each row corresponds to some bit of intelligence for a particular value or set of values. For example, the facts might be a pricing table for airline flights, where each row corresponds to a route and service level. Or the values might be list of demographic segmentation buckets (median income, marital status, etc) for browser cookies or device ids, used to serve up a demographic-specific ads.</span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Fact tables are application-specific, can be simple or sophisticated, and are often computed from an historical “big data” data set such as Spark, Hadoop, or commercial data warehouse, etc. Fact tables can often be quite large and can be frequently recomputed, perhaps weekly, daily, or even hourly. </span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">It is often important that the set of facts changes atomically. In other words, if airline prices are changing for ten’s of thousands of flights, all the prices should change all at once, instantly. It is unacceptable that some transactions reference older prices and some newer prices during the period of time it takes to load millions of rows of new data. This problem can be challenging when dealing with large fact tables as transactionally changing millions of values in can be a slow, blocking operation. Locking a table, thus blocking ongoing operations, is unacceptable when your application is processing hundreds of thousands of transactions per second.</span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">VoltDB solves this challenge in a very simple and efficient manner. VoltDB has the ability to transactionally swap tables in a single operation. How this works is as follows:</span></div>
<br /><ol style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Create an exact copy of your fact table schema, giving it a different name. Perhaps </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facts_Table</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> and </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facts_Table_2</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.</span></div>
</li>
</ol>
<br /><ol start="2" style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Make sure the schemas are indeed identical (and neither is the source of a view).</span></div>
</li>
</ol>
<br /><ol start="3" style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">While your application is running (and consulting rows in </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facts_Table</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> to make decisions), populate </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facts_Table_2</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> with your new set of data that you wish future transactions to consult. This table can be populated as slowly (or as quickly) as you like, perhaps over the course of a day.</span></div>
</li>
</ol>
<br /><ol start="4" style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">When your </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facts_Table_2</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> is populated, and you are ready to make it “live” in your application, call the VoltDB System Procedure </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">@SwapTables</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. This operation essentially switches the data for the table by swapping internal memory pointers. As such it executes in single to sub millisecond range.</span></div>
</li>
</ol>
<br /><ol start="5" style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">At this point, all the data that was in </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facts_Table_2</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> is now in </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facts_Table</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, and the old data in </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facts_Table</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> now resides in </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facts_Table_2</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. You may consider truncating </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facts_Table_2</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> in preparation for your next refresh of facts (and to reduce your memory footprint).</span></div>
</li>
</ol>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Let’s look at a contrived example using the VoltDB Voter sample application, a simple simulation of an ‘American Idol’ voting system. Let’s assume that each day you are going to feature different contestants for which callers can vote. Voting needs to occur 24x7, each day, with new contestants. The contestants change every day at midnight. We don’t want any downtime - no maintenance window, for example - when changing our contestant list.</span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Here’s what we need to do to the Voter sample to effect this behavior:</span></div>
<br /><ol style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">First we create an exact copy of our CONTESTANTS table, calling it CONTESTANTS_2:</span></div>
</li>
</ol>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-- contestants_2 table holds the next day's contestants numbers -- (for voting) and names</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">CREATE TABLE contestants_2</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> contestant_number integer NOT NULL</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, contestant_name varchar(50) NOT NULL</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, CONSTRAINT PK_contestants_2 PRIMARY KEY</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> (</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> contestant_number</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> )</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">);</span></span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">2. The schemas are identical, and this table is not the source of a materialized view.</span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">3. The Voter application pre-loads the CONTESTANTS table at the start of benchmark with the following contestants:</span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1> select * from contestants;</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">CONTESTANT_NUMBER CONTESTANT_NAME </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">------------------ ----------------</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 1 Edwina Burnam </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 2 Tabatha Gehling </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 3 Kelly Clauss </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 4 Jessie Alloway </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 5 Alana Bregman </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: "Courier New",Courier,monospace;"> 6 Jessie Eichman </span> </span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ cat contestants_2.csv</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1, Tom Brady</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">2, Matt Ryan</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">3, Aaron Rodgers</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">4, Drew Brees</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">5, Andrew Luck</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">6, Kirk Cousins</span></span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ csvloader contestants_2 -f contestants_2.csv </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Read 6 rows from file and successfully inserted 6 rows (final)</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Elapsed time: 0.905 seconds</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ sqlcmd</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">SQL Command :: localhost:21212</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1> select * from contestants_2;</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">CONTESTANT_NUMBER CONTESTANT_NAME </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">------------------ ----------------</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 1 Tom Brady </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 2 Matt Ryan </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 3 Aaron Rodgers </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 4 Drew Brees </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 5 Andrew Luck </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: "Courier New",Courier,monospace;"> 6 Kirk Cousins </span> </span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(Returned 6 rows in 0.01s)</span></span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">4. Now that we have the new contestants (fact table) loaded and staged, when we’re ready (at midnight!) we’ll swap the two tables, making the new set of contestants immediately available for voting without interrupting the application. We’ll do this by calling the @SwapTables system procedure as follows:</span></div>
<span style="font-family: "Courier New",Courier,monospace;"><br /></span><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ sqlcmd</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">SQL Command :: localhost:21212</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1> exec @SwapTables contestants_2 contestants;</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">modified_tuples </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">----------------</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 12</span></span></div>
<span style="font-family: "Courier New",Courier,monospace;"><br /></span><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(Returned 1 rows in 0.02s)</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">2> select * from contestants;</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">CONTESTANT_NUMBER CONTESTANT_NAME </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">------------------ ----------------</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 6 Kirk Cousins </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 5 Andrew Luck </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 4 Drew Brees </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 3 Aaron Rodgers </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> 2 Matt Ryan </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: "Courier New",Courier,monospace;"> 1 Tom Brady </span> </span></div>
<span style="font-family: "Courier New",Courier,monospace;"><br /></span><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(Returned 6 rows in 0.01s)</span></span></div>
<br /><br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">5. Finally, we’ll truncate the CONTESTANTS_2 table, initializing it once again ready to be loaded with the next day’s contestants:</span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ sqlcmd</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">SQL Command :: localhost:21212</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1> truncate table contestants_2;</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(Returned 6 rows in 0.03s)</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">2> select * from contestants_2;</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">CONTESTANT_NUMBER CONTESTANT_NAME </span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">------------------ ----------------</span></span></div>
<span style="font-family: "Courier New",Courier,monospace;"><br /></span><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(Returned 0 rows in 0.00s)</span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Note that steps 3-5, loading, swapping, and truncating the new fact table, can all be done in an automated fashion, not manually as I have demonstrated with this simple example.</span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Running the Voter sample and arbitrarily invoking @SwapTables during the middle of the run yielded the following results:</span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">A total of 15,294,976 votes were received during the benchmark...</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> - 15,142,056 Accepted</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> - 152,857 Rejected (Invalid Contestant)</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> - 63 Rejected (Maximum Vote Count Reached)</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> - 0 Failed (Transaction Error)</span></span></div>
<span style="font-family: "Courier New",Courier,monospace;"><br /></span><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Contestant Name</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Votes Received</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Tom Brady</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">4,472,147</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Kirk Cousins</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">3,036,647</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Andrew Luck</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">2,193,442</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Matt Ryan</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1,986,615</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Drew Brees</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1,963,903</span></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Aaron Rodgers</span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1,937,391</span></span></div>
<span style="font-family: "Courier New",Courier,monospace;"><br /></span><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">The Winner is: Tom Brady</span></span></div>
<br /><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; font-size: 9pt; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Apologies to those not New England-based! As you might have guessed, VoltDB’s headquarters are based just outside of Boston, Massachusetts</span><span style="background-color: transparent; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.</span></div>
</b></span><span style="font-family: Arial,Helvetica,sans-serif;"><br class="Apple-interchange-newline" /></span></div>
<div class="indent" style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<h2>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-weight: normal;"><i>Just the Facts, Ma’am</i></span></span></h2>
<div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; outline: 0px none; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial,Helvetica,sans-serif;">Leveraging big data intelligence to make per-event decisions is an important component of a real-time decision engine within your data pipeline. When building fast data pipeline applications using VoltDB, VoltDB provides tools and functionality to make this process easy and also painless to a running application. Two key tasks need to be performed: loading your new fact table into VoltDB, and atomically making that new data “live” to your business logic.</span></div>
<div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; outline: 0px none; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial,Helvetica,sans-serif;">Loading data into VoltDB from an external data source can be done easily via a couple of approaches: you can use one of our loaders such as the CSV, Kafka or JDBC loader; or you can write an application to insert the data.</span></div>
<div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; outline: 0px none; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; word-spacing: 0px;">
<span style="font-family: Arial,Helvetica,sans-serif;">Swapping tables in VoltDB is a trivial exercise with the<span> </span><span class="monospace" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; margin: 0px; outline: 0px none; padding: 0px; vertical-align: baseline;">@SwapTable</span><span> </span>system procedure. And most importantly, swapping in new fact table data does not impact ongoing stream processing.</span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><br class="Apple-interchange-newline" /></span></div>
John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-43700771396348909572017-08-09T05:40:00.001-07:002017-08-09T05:42:22.302-07:00Top 5 Ways to Better Use Your Data
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:-536870145 1107305727 0 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Arial",sans-serif;
mso-fareast-font-family:Arial;
color:black;
mso-ansi-language:EN;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:11.0pt;
mso-ansi-font-size:11.0pt;
mso-bidi-font-size:11.0pt;
font-family:"Arial",sans-serif;
mso-ascii-font-family:Arial;
mso-fareast-font-family:Arial;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;
color:black;
mso-ansi-language:EN;}
.MsoPapDefault
{mso-style-type:export-only;
line-height:115%;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:0in;
mso-footer-margin:.5in;
mso-page-numbers:1;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:618535592;
mso-list-template-ids:-949058474;}
@list l0:level1
{mso-level-text:"%1\)";
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.25in;
text-decoration:none;
text-underline:none;}
@list l0:level2
{mso-level-number-format:alpha-lower;
mso-level-text:"%2\)";
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.75in;
text-decoration:none;
text-underline:none;}
@list l0:level3
{mso-level-number-format:roman-lower;
mso-level-text:"%3\)";
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:1.25in;
text-decoration:none;
text-underline:none;}
@list l0:level4
{mso-level-text:"\(%4\)";
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.75in;
text-decoration:none;
text-underline:none;}
@list l0:level5
{mso-level-number-format:alpha-lower;
mso-level-text:"\(%5\)";
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.25in;
text-decoration:none;
text-underline:none;}
@list l0:level6
{mso-level-number-format:roman-lower;
mso-level-text:"\(%6\)";
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:2.75in;
text-decoration:none;
text-underline:none;}
@list l0:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.25in;
text-decoration:none;
text-underline:none;}
@list l0:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.75in;
text-decoration:none;
text-underline:none;}
@list l0:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:4.25in;
text-decoration:none;
text-underline:none;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
-->
</style>
<br />
<div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><b><span lang="EN" style="background: white none repeat scroll 0% 0%; color: #222222; line-height: 115%;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: xx-small;">This post originally appeared on VoltDB.com in May, 2016. </span></span></span></b></span></span></div>
<div class="MsoNormal">
<br /></div>
<h2 class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><b><span lang="EN" style="background: white none repeat scroll 0% 0%; color: #222222; line-height: 115%;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: xx-small;"> </span></span>Top 5 Ways to Better Use Your Data</span></b><span lang="EN"></span></span></span></h2>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">Sir Francis Bacon is said to have coined the
phrase “scientia potentia est”, translated as ‘knowledge is power’. Four
hundred years later, we might rewrite the phrase as “data potentia est”.<span> </span>Data is power - so how can you better use
your organization’s data?<span> </span>Here are five
suggestions to help you drive value from your organization’s data - quickly.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormalCxSpMiddle" style="margin-left: 0.5in; text-indent: -0.25in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN"><span>1)<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Know what you have.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">First and foremost,
inventory your data.<span> </span></span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">There are two types
of data to identify. First is historical data. Historical data is data you’ve
accumulated over years of doing business. This could include databases, files,
spreadsheets, presentations, transactions, logs, etc. The second type of data
is the data that is being created “right now” - this is real-time data.
Real-time data potentially has immediate value, and then ultimately turns into
historical data.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">Catalog and
prioritize the data you have. Ideally, you will also want to identify the
sources of data. Knowing how data is created allows you to capture it, store
it, and eventually extract value from it, at the least cost to the
organization, and with the best ROI.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">The value of each
type of data is different. Historical data allows you to analyze and mine past
events. Real-time data gives you the opportunity to calculate analytics,
possibly compare them to historical trends, and perform business actions in
real-time, to capture additional and immediate value.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">By way of example,
consider a fraud prevention offering. Fraudulent transaction patterns are mined
from historical data. These historical patterns are applied to real-time
transactions to identify and reject suspected fraudulent transactions.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormalCxSpMiddle" style="margin-left: 0.5in; text-indent: -0.25in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN"><span>2)<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Architect a data strategy that
handles both Big <b><i>and</i></b> Fast data.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">Creating a historical
archive, perhaps a data lake via a Hadoop cluster, to store your data is only
one step. Today enterprises create data at a tremendous - and growing -
rate.<span> </span>Processing and ingesting data in
batch mode overnight is no longer acceptable. Real-time responsive enterprises
need to process and react to data in seconds to minutes. Many organizations,
including mobile operators, telecom providers, financial services organizations
and advertising technology providers must respond in milliseconds.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormalCxSpMiddle" style="margin-left: 0.5in; text-indent: -0.25in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN"><span>3)<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Choose the appropriate
technologies.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">There are a plethora
of big data tools, and most are designed around best practices, optimized to
extract value from both historical and real-time data. </span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">Minimally you will
need technologies for these areas:</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><u><span lang="EN">Big Data</span></u><span lang="EN">: Typically, the main data management platform for big data is Hadoop
or a data warehouse or perhaps a combination of the two to handle both
structured and unstructured data. They act as the repository for all your data,
often called the “data lake”. The data lake stores historical data to be
analyzed and mined.<span> </span></span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><u><span lang="EN">Fast Data</span></u><span lang="EN">: Data is being created at a dizzying rate every day. Fast data is data
that is being created now and is streaming into your company now.<span> </span>It could be user clicks on your corporate web
page or product downloads or any operational event occurring in your organization.<span> </span>To deliver this fast data to the systems that
can act on it, consider a message queueing systems such as Kafka.<span> </span>To eliminate batch processing (slow data!)
this message queue needs to deliver event data to an operational data stores
capable of handling and processing messages at web-scale speed, thousands to
tens of thousands to even millions of events per second.<span> </span>The operational data store’s role is to
ingest the data and process it in real-time.<span>
</span>Real-time processing can include computing real-time analytics, such as
counts, aggregations and leaderboards, issuing real-time alerts, deduping,
enriching and aggregating events, and making transactional decisions on an
event-by-event basis. Both NewSQL and NoSQL operational stores can provide horsepower
for handling real-time processing of event streams.<span> </span>Modern operational data stores range from
strongly-consistent SQL databases to eventually consistent key/value and
document stores.<span> </span>Consider numerous
factors when choosing, including transactions as well as query interface,
important for your data visualization tooling.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><u><span lang="EN">Data Visualization</span></u><span lang="EN">: Dashboards, charts, leaderboards, pivot tables, and visualizations
all play a key role in understanding your data, both historical and real-time. </span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">Historical visualization
helps you explore, understand patterns, and create predictive analytics.
Real-time visualizations help you understand the current state of your
business, usually in the form of a real-time dashboard.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">You will want to
evaluate tools from vendors such as Tableau, Qlik and MicroStrategy for
dashboarding and ad hoc visualizations -- user experience is a critical factor
with this kind of software so having your users try it out is essential.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><u><span lang="EN">Data Science</span></u><span lang="EN">: A growing number of tools can help you extract information and
insight from your data. Machine learning packages provide data classification,
clustering, and regression analysis, and allow software to “learn” to identify
and make predictions on data. Consider popular open source offerings such as
Spark (MLlib) or R to get started.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormalCxSpMiddle" style="margin-left: 0.5in; text-indent: -0.25in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN"><span>4)<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Build a Data Pipeline that
delivers Data as a Service (DaaS) to internal customers.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">Define an
architecture that serves data to your internal customers. Capturing and
analyzing the data is great, but it is only the first step. Data and insights
must be readily available to consumers (people and applications) across your
enterprise. Consumers of your data must be able to tap into both historical
data from the data lake as well as real-time fast data, along with the insights
derived from both together.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormalCxSpMiddle" style="margin-left: 0.5in; text-indent: -0.25in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN"><span>5)<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Begin building applications to
extract value from the data<span> </span>-<span> </span>then iterate.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">Start small and add
incrementally. Identify opportunities for small quick wins that will prove you
can capture value from your data. Realize that data evolves and new patterns
will emerge. Foster an environment of experimentation, innovation and
continuous improvement and iterate on your data analysis.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span lang="EN">Data is valuable. Batch processing is so
1990s. Now you’ve got five ideas for how to extract more value from your data.
Start now and iterate. Think Big, of course, but also Think <i>Fast</i>.</span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">
</span></span>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-62105252047086191512017-08-08T07:21:00.002-07:002017-08-08T07:21:51.150-07:00Streaming Data: Billions and Billions (of transactions)<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN"> </span></b></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: xx-small;">This post originally appeared on VoltDB.com in October, 2016. </span></span></div>
<h1 class="entry-title mkd-post-title" itemprop="name" style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 35px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; line-height: 1.2em; margin: 34px 0px 13px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
Billions and billions (of transactions)</h1>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
<em style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Billions and billions<a href="https://www.voltdb.com/blog/billions-and-billions-of-transactions#_ftn1" name="_ftnref1" style="background: 0px 0px; border: 0px; color: #00a98f; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; transition: color 0.15s ease-out; vertical-align: baseline;"><sup style="background: 0px 0px; border: 0px; bottom: 0.5ex; font-size: 11.25px; height: 0px; line-height: 0; margin: 0px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;"><strong style="background: 0px 0px; border: 0px; color: #262932; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">[1]</strong></sup></a></em><span> </span>of transactions are executed each and every day by production-deployed VoltDB applications.</div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
A back-of-the-napkin calculation puts the number north of 50 billion a day. The number is likely much, much higher. These billions of transactions are executed across a variety of innovative applications, applications not practical, or sometimes even possible, to build a decade ago. Chances are that you have touched VoltDB – without knowing it – today!</div>
<ul style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; list-style-position: inside; margin: 15px 0px; orphans: 2; outline: 0px; padding: 0px 0px 0px 20px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">When you call someone on your cell, there’s a good chance a<span> </span><a href="https://www.voltdb.com/hubfs/content/case_studies/hv_case_studies/hv-case-study-openet-case-study.pdf" style="background: 0px 0px; border: 0px; color: #00a98f; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; transition: color 0.15s ease-out; vertical-align: baseline;">VoltDB application</a><span> </span>is approving the call.</li>
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">If you have played some of the top 10 mobile games within the past few years, a<span> </span><a href="https://www.voltdb.com/files/peak-games-implements-real-time-segmentation-personalization/" style="background: 0px 0px; border: 0px; color: #00a98f; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; transition: color 0.15s ease-out; vertical-align: baseline;">VoltDB application</a><span> </span>likely processed your in-game events.</li>
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">If you’ve run a road race recently, there’s a good chance a VoltDB application tracked your progress.</li>
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">If you live in the UK and turn on a light switch, you are interacting with VoltDB as your electrical smart grid<span> </span><a href="https://www.voltdb.com/wrteradataiot" style="background: 0px 0px; border: 0px; color: #00a98f; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; transition: color 0.15s ease-out; vertical-align: baseline;">uses VoltDB to authorize</a><span> </span>and process grid and meter events.</li>
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">If you play baccarat in a casino, there’s a good chance the bets placed and movement of chips on each gaming table is validated by VoltDB via in-chip RFID technology.</li>
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">If you bought something in China with your credit card, it is likely that your transaction was verified as valid or detected as fraudulent by a<span> </span><a href="https://www.voltdb.com/blog/2016/06/23/internet-people-iot-analytics-things-industry-examples/" style="background: 0px 0px; border: 0px; color: #00a98f; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; transition: color 0.15s ease-out; vertical-align: baseline;">VoltDB application</a>.</li>
</ul>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
The VoltDB engineering team has been building the world’s fastest in-memory database for over eight years now. It’s been a fun as well as challenging journey and we’ve learned a lot in the process. Some of the more notable learnings have been:</div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
<strong style="background: 0px 0px; border: 0px; color: #262932; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Batch is so 2000s</strong>. Legacy applications are moving from batch processing of feeds to real-time processing. New applications are being built to ingest, transact, and compute analytics on data streaming from all types of sources, such as IoT sensors, mobile devices, logs, etc. The world is moving to real-time and turning to products like VoltDB, which has the capability to handle high throughput (thousands to millions of events per second).</div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
<strong style="background: 0px 0px; border: 0px; color: #262932; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">SQL [still] rules the roost</strong>. VoltDB was founded around the same time as the NoSQL movement. At the time, building a distributed SQL data store seemed contrarian, given the NoSQL hype. Fast forward a half-dozen years and we now see many of the more popular NoSQL products offering SQL or SQL-like interfaces. Even the Hadoop ecosystem has added SQL interfaces to the data lake. <a href="https://www.voltdb.com/blog/nosql-vs.-newsql-whats-the-difference" style="background: 0px 0px; border: 0px; color: #00a98f; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; transition: color 0.15s ease-out; vertical-align: baseline;">SQL is here to stay</a>(and, in fact, never left).</div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
VoltDB’s commitment to SQL remains strong. Over the past year we’ve added windowing analytic SQL, geospatial SQL support (points and polygons), continuous queries via real-time materialized views, the ability to join streams of data to compute real time analytics, and the ability to very quickly generate an approximate count of the number of distinct values. More advanced SQL capabilities are made available nearly every month.</div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
<strong style="background: 0px 0px; border: 0px; color: #262932; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Expect the unexpected, operationally.<span> </span></strong>When you build a highly-available, clustered database that runs 24×7 at high throughput, on bare metal or in the cloud, all types of error scenarios that<span> </span><em style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">could</em><span> </span>happen,<span> </span><em style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">do</em>happen. Disks fail, networks break down, power goes out, mistakes are made, lightning strikes.</div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
Building a production-ready operational database is tough work. The bar is set high and not negotiable. The following features are table stakes for current and next generation applications:</div>
<ul style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; list-style-position: inside; margin: 15px 0px; orphans: 2; outline: 0px; padding: 0px 0px 0px 20px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><u style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">High availability</u>: Machines, containers and virtual machines can and do break, crash or die. Networks pause or partition. The database must handle these situations properly.</li>
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><u style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Correctness</u>: Accuracy matters. Every client should see a consistent view of the data.</li>
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><u style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Predictable latency</u>: Response time should be predictable, within 99.999% of the time.</li>
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><u style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Durability</u>: Never lose data even in the face of nodes crashing or networks partitioning.</li>
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><u style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Performance</u>: The database needs to scale with your application. Adding additional nodes should scale throughput smoothly and linearly.</li>
</ul>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
To maintain these requirements across all scenarios, VoltDB Engineering constantly pounds on the database in our QA lab. We focus on randomizing errors of all types. The more we learn, the more we feel we need to test more. That’s one of the reasons we reached out to Kyle Kingsbury, (aka Aphyr), to independently apply his dastardly<span> </span><a href="https://www.voltdb.com/jepsen" style="background: 0px 0px; border: 0px; color: #00a98f; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; transition: color 0.15s ease-out; vertical-align: baseline;">Jepsen test suite</a><span> </span>and methodology to VoltDB. As part of this effort, we found a few issues in the product before they caused issues in customer deployments. This effort remains one of the team’s proudest accomplishments of 2016.</div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
But we know there’s always more work to do, and we’re committed to doing it.</div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
<strong style="background: 0px 0px; border: 0px; color: #262932; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Streaming analytics and operational data stores are merging into a new real-time platform</strong></div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
The architecture required for real-time processing of streaming data is evolving rapidly. When we started building VoltDB, a developer had to cobble together numerous pieces of technology, (e.g. ZooKeeper, Kafka, Storm, Cassandra), to process real-time streams of data.</div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
<img alt="Billions.png" src="https://www.voltdb.com/wp-content/uploads/2017/03/Billions.png?t=1490373723346&width=622&name=Billions.png" style="height: auto; max-width: 100%;" width="622;" /></div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
VoltDB Founding Engineer John Hugg<span> </span><a href="http://dataconomy.com/challenging-the-lambda-architecture-building-apps-for-fast-data-with-voltdb-v5-0/" style="background: 0px 0px; border: 0px; color: #00a98f; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; transition: color 0.15s ease-out; vertical-align: baseline;">stated</a><span> </span>at a recent<span> </span><a href="https://www.youtube.com/watch?v=hD5M4a1UVz8" style="background: 0px 0px; border: 0px; color: #00a98f; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; transition: color 0.15s ease-out; vertical-align: baseline;">Facebook @Scale</a><span> </span>conference,<span> </span><i style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">“OLTP at scale looks a lot like a streaming application.”</i> Today we’re seeing the result of that evolution: a convergence of real-time ingestion, streaming analytics, and operational interaction into a single platform. While creating the next generation of database, the VoltDB engineering team has assembled the core components for building streaming fast data applications in VoltDB:</div>
<ul style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; list-style-position: inside; margin: 15px 0px; orphans: 2; outline: 0px; padding: 0px 0px 0px 20px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Real-time ingestion with in-process, highly-available importers reading from Kafka, Kinesis and other streaming sources;</li>
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Streaming analytics on live data via ad hoc SQL analytics as well as continuous queries; and</li>
<li style="background: 0px 0px; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">A blazingly fast in-memory storage and ACID transaction execution engine capable of accessing hot and historical data to make per-event decisions millions of times per second.</li>
</ul>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
The VoltDB engineering team is not done building (or learning)! Our mission is to make building highly-reliable, high throughput fast data applications not only possible, as it is today, but also extremely easy. So stay tuned. Over the coming months we’ll be delivering additional geo-distributed and high availability features, additional importers and exporters for building fast data pipeline applications, and improving our real-time analytical SQL capabilities.</div>
<div style="-webkit-text-stroke-width: 0px; background: 0px 0px rgb(255, 255, 255); border: 0px; color: #414042; font-family: Ubuntu, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 300; letter-spacing: normal; margin: 10px 0px; orphans: 2; outline: 0px; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;">
<a href="https://www.voltdb.com/blog/billions-and-billions-of-transactions#_ftnref1" name="_ftn1" style="background: 0px 0px; border: 0px; color: #00a98f; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; transition: color 0.15s ease-out; vertical-align: baseline;"><sup style="background: 0px 0px; border: 0px; bottom: 0.5ex; font-size: 11.25px; height: 0px; line-height: 0; margin: 0px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;">[1]</sup></a><span> </span>With a hat tip to Johnny Carson and Carl Sagan</div>
John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-45905704677277403322017-08-03T08:05:00.000-07:002017-08-03T08:05:15.273-07:00In-Memory Database Sizing
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Arial",sans-serif;
mso-fareast-font-family:Arial;
color:black;
mso-ansi-language:EN;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:11.0pt;
mso-ansi-font-size:11.0pt;
mso-bidi-font-size:11.0pt;
font-family:"Arial",sans-serif;
mso-ascii-font-family:Arial;
mso-fareast-font-family:Arial;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;
color:black;
mso-ansi-language:EN;}
.MsoPapDefault
{mso-style-type:export-only;
line-height:115%;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:0in;
mso-footer-margin:.5in;
mso-page-numbers:1;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:834539400;
mso-list-template-ids:627761414;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.25in;
text-decoration:none;
text-underline:none;}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.75in;
text-decoration:none;
text-underline:none;}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.25in;
text-decoration:none;
text-underline:none;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.75in;
text-decoration:none;
text-underline:none;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.25in;
text-decoration:none;
text-underline:none;}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.75in;
text-decoration:none;
text-underline:none;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.25in;
text-decoration:none;
text-underline:none;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.75in;
text-decoration:none;
text-underline:none;}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:4.25in;
text-decoration:none;
text-underline:none;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
-->
</style>
<br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN"> </span></b></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: xx-small;">This post originally appeared on VoltDB.com in June, 2014. </span></span><br />
<br />
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: xx-small;"><span style="font-size: x-large;">In-Memory Database Sizing</span> </span></span></h2>
</div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Sizing an in-memory database does not follow
conventional database sizing rules.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">For traditional databases, you buy a decent
server machine, likely one with many CPU cores and reasonable memory, and then
focus on application IOPS (I/O Operations per Second).<span style="mso-spacerun: yes;"> </span>If you are really going to stress the
database, you must choose disks that can support the I/O needs of your
application, today and in the future. Because these systems often use many
disks to achieve high I/O performance, capacity is usually an afterthought.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">With in-memory databases, throw out everything
you know about sizing databases. Performance is now the afterthought, but
capacity must be carefully considered.<span style="mso-spacerun: yes;"> </span></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">To size your in-memory clustered database
application you must consider the following factors:</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormalCxSpMiddle" style="margin-left: .5in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><span style="mso-list: Ignore;">●<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">First, compute the size of the
data your application expects to host.<span style="mso-spacerun: yes;">
</span>This means computing the size of all rows in all tables.<span style="mso-spacerun: yes;"> </span>And also computing the size of all table
indexes. VoltDB provides an easy-to-use interactive sizing tool in our application
catalog report, described later in this post.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormalCxSpMiddle" style="margin-left: .5in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><span style="mso-list: Ignore;">●<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">If you want a highly available
database cluster, all data must be stored redundantly. You’ll need to multiply
your logical data size by the replication factor to understand your memory
requirements. For example, if you have 100GB of table and index data, and you
want your database to be able to withstand losing one of the nodes in the
cluster, you will want each datum to be stored twice, and on two different
physical machines. This means that you need to size the data requirement of
your database to be 200GB (100GB of data X 2 copies of the data).</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormalCxSpMiddle" style="margin-left: .5in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><span style="mso-list: Ignore;">●<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Allow for some extra memory,
perhaps an additional 25%, for database and operating system overhead. VoltDB
uses extra memory for storing intermediate results, maintaining an undo log,
caching SQL plans and buffering network data. Note that on a machine with 4GB,
you’ll want to leave a larger fraction of memory free than on a machine with
256GB.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">This tallied memory total can now help you
decide how many machines your system requires.<span style="mso-spacerun: yes;">
</span>Note at no time did we need to determine how much CPU we required, or
how many IOPS were needed.<span style="mso-spacerun: yes;"> </span>Because you
are sizing your database based on data, memory size is the most important
calculation you will likely use. Generally speaking, in-memory databases like
VoltDB operate so fast that CPU utilization is not a problem - there is plenty
of headroom for growth. As for disk I/O, most in-memory systems use sequential
logs on disk, eschewing costly random I/O. With this reduced dependency on disk
performance, VoltDB can achieve tremendous throughput, even on commodity
spinning disks.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Often, you’ll be faced with a choice between
many machines with less memory per machine or a small number of high-memory
machines. There are lots of reasons to lean one way or another. For one, you
should try to run with at least three nodes if availability or redundancy is a
concern. Additionally, some administrator operations run faster with less
per-machine data. At some point however, too many nodes can be a management hassle.
Most VoltDB users run with 3 to 30 nodes per cluster for these reasons.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><u><span lang="EN">Planning for Data Capacity and Growth</span></u></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Sizing VoltDB databases is fairly
straight-forward.<span style="mso-spacerun: yes;"> </span>Once you have settled
on your application’s database schema, point your web browser to the database
Catalog Report and choose the “Size Worksheet”, found at this URL: <a href="http://localhost:8080/#z"><span style="color: #1155cc;">http://localhost:8080/#z</span></a>
(note the database must be running). </span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="mso-ansi-language: EN-US; mso-no-proof: yes;"></span><span lang="EN"></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"> <img alt="" src="data:image/png;base64,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" /></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">This sizing worksheet is automatically built
from your application’s schema. It allows you to enter your expected number of
rows for each table and then computes the amount of memory required for the
database cluster as a whole.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span style="mso-ansi-language: EN-US; mso-no-proof: yes;"><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdQAAACcCAYAAADGW1rZAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAm1pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzI8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K0ULlwgAAQABJREFUeAHtnQm4jdX3x5ehKH4oKhkyJ1Ik85xZUhINmlMphExl6k8pMk+ZMiZjxhIh8yxzEaKIKJUGkmT478/Svr3dXA6Oe273rv08555z3ne/e6/13Wuv71r7fc/diU65IlYMAUPAEDAEDAFD4KIQSHxRV9vFhoAhYAgYAoaAIaAIGKGaIRgChoAhYAgYAmFAwAg1DCBaE4aAIWAIGAKGgBGq2YAhYAgYAoaAIRAGBIxQwwCiNWEIGAKGgCFgCBihmg0YAoaAIWAIGAJhQMAINQwgWhOGgCFgCBgChoARqtmAIWAIGAKGgCEQBgSMUMMAojVhCBgChoAhYAgYoZoNGAKGgCFgCBgCYUDACDUMIFoThoAhYAgYAoZAnCDUo0ePyqFDh2w0Agj8+eef8uuvv8qJEycCR+2jIWAIGAKGQFxFIKKEevjwYenatavce++9cvfdd8vjjz8uS5YsUazee+89eeyxx+SHH364aOymTp0q999/v7z77rsX3NaePXvkiSeekAULFpxXG9999508/PDDMm3atJCug0BHjhwptWvXlnvuuUceeughmTRpktgeBiHBZ5UMAUPAEIgYAhEl1LFjx8qIESOkXLlySqZff/21NGvWTL799lvJnj27lClTRpIlS3ZOcM6WxZHpTZw4UT755BMlpt9///1f7cV0/fHjx6Pqch1tHDhwIOpYTB+C7SVPnlzKli0rN9xwQ1T1kydPCq8zlYULF8qbb74pN954ozzzzDNKpC+//LL2fab6ZzoWbDsoS7Bu8HhMZB3UP3itfTYEDAFDwBD4NwJJ/30o9o588cUX4gmnWLFicuutt8q8efOURH766Sf58ssvdcmzR48e8umnn8qVV14piRIlkmuuuUbatWundceMGSNHjhyRUqVKyXPPPaftBTXYtGmTbN++XYoUKaLv69atk5IlS8r06dM1G77qqquEYxkyZJAWLVpIlixZZO7cuTJu3DiBRFOmTKmZKecvv/xySZw4sfTp00d++eUXlYE6HTt2lHz58mld2v3jjz8kc+bM0rRpUz22c+dOyZUrlxw7dkwGDhyo5AihoW/Dhg0lVapUUSJ/9dVXqnPRokWlZs2aUrp0aRk/frzqvmrVKs1e27Rpo+1369ZNZXrhhRekc+fOGnzs2rVLvv/+e7nzzjvlm2++0b7y5MkjkPKKFStk/vz5kiZNGj2OzJwje2Yc6tevL8WLF1dsOIYe1H3++eclSZIkMnjwYClYsKBA+uBy9dVXC7IkTZpUXn31Vbn22mulUaNGUbrYB0PAEDAEEhICEc1Qq1Spos746aeflho1asgHH3wgVatWleuvv162bdsmH330kZIaZATBcK915syZsnfvXoFccOaQAsujo0eP1mw3+uDNmjVLUqRIoeQHcX344YdaBeKaMmWK/Pzzz0rGkChLwxAlRAU5NG/eXLPlAQMGKBlC5hAP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" /></span><span lang="EN"></span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Note that the footprint of your database is
the size of the number of rows as well as the size of all indexes and
materialized views. You must also leave additional memory for the operating
system.<span style="mso-spacerun: yes;"> </span>Note that this assumes that
VoltDB is the only active application on these machines.<span style="mso-spacerun: yes;"> </span>If you plan on sharing the machines with
other applications, something we do not recommend, your memory requirements
will naturally be larger.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><u><span lang="EN">Expanding your Database Capacity</span></u></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">A well behaved IT environment will monitor the
performance and capacity of the applications running the business.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Because VoltDB processes transactions
incredibly fast, it is often the case that there is plenty of transaction
throughput headroom and there are lots of extra CPU cycles available. Monitoring
the memory usage of the database cluster becomes much more important. VoltDB
provides monitoring interfaces, as well as Nagios and New Relic plug-ins that
make monitoring memory usage easy. These tools allow you to define capacity
alerts, much the way you would define disk space usage alerts for legacy
database systems. Should your in-memory database memory usage grow to a high
level, signaling a capacity limit alert, it may be time to add more storage
capacity to your database.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">With VoltDB, adding capacity is easy: simply
add more nodes.<span style="mso-spacerun: yes;"> </span>VoltDB supports adding
nodes to a running cluster without interrupting ongoing operations or
sacrificing ACID transactional guarantees.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">If you do not wish to add more nodes to your
database cluster, doing a rolling memory upgrade of machines in a redundant
VoltDB cluster is an alternative. Since VoltDB uses active replication within a
cluster, removing and replacing a node can be done transparently to a user’s
application with no data loss and often unnoticeable performance impact.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><u><span lang="EN">In-Memory Database provisioning… A New Way
of Thinking</span></u></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">If you are provisioning and rolling out a new
application using an in-memory database you will have to shift your thinking
about how you size your deployment. With all data residing in memory you will
need to provision enough memory in your database cluster to hold all of your
data, and a bit more memory for regular operating system operations.</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Disks are only used for durability and most
in-memory systems like VoltDB work great with commodity hardware, disks
included. Sizing for IOPS is a thing of the past!</span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-83320229786330642422017-08-02T12:49:00.003-07:002017-08-02T12:52:46.671-07:00Simplifying the Lambda Architecture<style>
<!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:-536870145 1107305727 0 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Arial",sans-serif;
mso-fareast-font-family:Arial;
color:black;
mso-ansi-language:EN;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:11.0pt;
mso-ansi-font-size:11.0pt;
mso-bidi-font-size:11.0pt;
font-family:"Arial",sans-serif;
mso-ascii-font-family:Arial;
mso-fareast-font-family:Arial;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;
color:black;
mso-ansi-language:EN;}
.MsoPapDefault
{mso-style-type:export-only;
line-height:115%;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:0in;
mso-footer-margin:.5in;
mso-page-numbers:1;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:694043458;
mso-list-template-ids:-146114968;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.25in;
text-decoration:none;
text-underline:none;}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.75in;
text-decoration:none;
text-underline:none;}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.25in;
text-decoration:none;
text-underline:none;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.75in;
text-decoration:none;
text-underline:none;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.25in;
text-decoration:none;
text-underline:none;}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.75in;
text-decoration:none;
text-underline:none;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.25in;
text-decoration:none;
text-underline:none;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.75in;
text-decoration:none;
text-underline:none;}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:4.25in;
text-decoration:none;
text-underline:none;}
@list l1
{mso-list-id:2108697400;
mso-list-template-ids:-1638782332;}
@list l1:level1
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.25in;
text-decoration:none;
text-underline:none;}
@list l1:level2
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.75in;
text-decoration:none;
text-underline:none;}
@list l1:level3
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:1.25in;
text-decoration:none;
text-underline:none;}
@list l1:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.75in;
text-decoration:none;
text-underline:none;}
@list l1:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.25in;
text-decoration:none;
text-underline:none;}
@list l1:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:2.75in;
text-decoration:none;
text-underline:none;}
@list l1:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.25in;
text-decoration:none;
text-underline:none;}
@list l1:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.75in;
text-decoration:none;
text-underline:none;}
@list l1:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:4.25in;
text-decoration:none;
text-underline:none;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
-->
</style>
<br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN"> </span></b></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: xx-small;">This post originally appeared on VoltDB.com in December, 2014. </span></span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN" style="font-size: 18.0pt; line-height: 115%;">Evolving and Simplifying the Lambda
Architecture</span></b></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN">Introduction</span></b></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span>
<br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">The Lambda Architecture defines a robust
framework for ingesting streams of Fast Data while providing efficient
real-time and historical analytics. In Lambda, immutable data flows in one
direction: into the system. The architecture’s main goal is to execute
OLAP-type processing faster - in essence,<span style="mso-spacerun: yes;">
</span><span style="background: white; color: #333333;">reduce
columnar analytics from every couple of seconds to 100ms or so, without
actually enabling interesting new applications like real time application of
user segments/scoring. As Lambda was conceived, it wasn’t designed to </span>transact
and make per-event decisions on the Fast Data, nor to be responsive to the
events coming in, <b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;">as they arrive</i></b>.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN">What is
Lambda?</span></b></span><br />
</div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">The Lambda Architecture is a new Big Data
architecture designed to ingest, process and query both fresh and historical
(batch) data in a single data architecture. In his book “Big Data - <i style="mso-bidi-font-style: normal;">Principles and best practices of scalable
realtime data systems</i>”, Nathan Marz introduces the Lambda Architecture and
states that: </span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal" style="margin-left: .5in;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">“<i style="mso-bidi-font-style: normal;">The Lambda Architecture.. provides a general purpose approach to
implementing an arbitrary function on an arbitrary dataset and having the
function return its results with low latency.</i>”</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">Nathan further defines the system as having
both a batch (historical) layer, as well as a speed layer:</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal" style="margin-left: .5in;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><i style="mso-bidi-font-style: normal;"><span lang="EN">“The Lambda Architecture solves the problem of computing arbitrary
functions</span></i></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal" style="margin-left: .5in;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><i style="mso-bidi-font-style: normal;"><span lang="EN">on arbitrary data in realtime by decomposing the problem into three
layers: the</span></i></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal" style="margin-left: .5in;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><i style="mso-bidi-font-style: normal;"><span lang="EN">batch layer, the serving layer, and the speed layer. “</span></i></span></div>
<div class="MsoNormal" style="margin-left: .5in;">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="mso-ansi-language: EN-US; mso-no-proof: yes;"><img alt="" src="data:image/png;base64,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" /></span><span lang="EN"></span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">The batch layer is usually a “data lake”
system like Hadoop, though it could also be an OLAP data warehouse like Vertica
or Netezza. This historical archive is used to hold all of the data ever
collected. The batch layer supports batch query; batch processing is used to
generate analytics, either predefined or ad hoc.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">The speed layer is defined as a combination of
queuing, streaming and operational data stores. In the Lambda Architecture, the
speed layer is similar to the batch layer in that it computes similar analytics
- except that it computes those analytics in real-time on only the most recent
data. The analytics the batch layer calculates, for example, may be based on
data one hour old. It is the speed layer’s responsibility to calculate
real-time analytics based on fast moving data - data that is zero to one hour
old.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">As you can see, if you combine the analytics
produced by the batch layer as well as the speed layer, you have a complete
view of the analytics across all data, fresh and historical.<span style="mso-spacerun: yes;"> </span>The third layer of Lambda, the serving layer,
is responsible for serving up results, combined from both the speed and batch
layer.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">To summarize, Lambda defines a Big Data
architecture that allows arbitrary queries and computations on both fast moving
data as well as historical data.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="mso-ansi-language: EN-US; mso-no-proof: yes;"><img alt="" src="data:image/png;base64,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" /></span><span lang="EN"></span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN">“Typical”
Lambda Applications</span></b></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">The Lambda Architecture is an emerging
paradigm in Big Data computing. As such, new Lambda-based applications are
emerging seemingly weekly. However, one of the more common use cases of
Lambda-based applications is log ingestion and accompanying analytics. “Logs”
in this context could be general log collection, website clickstream logging,
VPN access logs, or the popular Twitter tweet stream collection.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">Log messages often are created at a high
velocity. They are immutable and usually are time-tagged or time ordered. This
is the "fast data" that is captured and harvested - it is this data
that is ingested by both Lambda’s speed layer and batch layer, usually in
parallel, by way of message queues and streaming systems (like Kafka and
Storm). The ingestion of each log message does not require a response to the
entity that delivered the data - it is a one-way data pipeline. </span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">A log message’s final resting place is the
data lake, where batch metrics are [re]computed.<span style="mso-spacerun: yes;"> </span>The fast layer computes similar results for
the most recent "window", staying ahead of the Hadoop/batch
layer.<span style="mso-spacerun: yes;"> </span></span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">Analytics at the speed and batch layer can be
predefined or ad hoc. Should new analytics be desired, Lambda suggests that you
can re-run the entire data set, from the data lake or from the original log
files, to recompute the new metrics. For example, analytics for website click
logs could be counting page hits and page popularity. For tweet streams they
could be computing trending topics.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN">VoltDB
and the Lambda Architecture</span></b></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">VoltDB, a clustered, in-memory, relational
database.<span style="mso-spacerun: yes;"> </span>It supports fast ingest of
data, real-time ad hoc analytics and rapid export of data to downstream systems
like Hadoop and OLAP offerings.<span style="mso-spacerun: yes;"> </span>It fits
squarely and solidly into the Lambda Architecture’s speed layer. Like popular
streaming systems, VoltDB is horizontally scalable, highly available, and fault
tolerant — all while sustaining transactional ingestion speeds of hundreds of
thousands to millions of events per second. In the standard Lambda
Architecture, the inclusion of VoltDB greatly simplifies the speed layer by
replacing both the streaming and the operational data store portions of the
speed layer.<span style="mso-spacerun: yes;"> </span><span style="color: red;"></span></span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">In the outlined Lambda Architecture, a queuing
system like Kafka would feed both VoltDB and Hadoop, or VoltDB directly, which
would then in turn immediately export the event to the data lake.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN">Future-proofing
Lambda</span></b></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">As defined today, the Lambda Architecture is
very focused on fast data collection and read-only queries on both fast and
historical data. In Lambda, data is immutable - it never changes. Data comes
into the system in streams and metrics, both historical and real time, and is
calculated and maintained. External systems make use of the Lambda-based
environment to query the computed analytics. These analytics are then used to
alert, should metric thresholds be crossed, or harvested, for example in the
case of Twitter trending topics.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">When considering improvements to the Lambda
Architecture, what if you could react, per event, to the incoming data stream?
In essence, you’d have the ability to act on the incoming feed, in addition to
performing real-time analytics. </span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">Here at VoltDB we have a lot of experience
building streaming applications for Fast Data, another term for the
Lambda-defined “speed layer”. Most of our customers are building Fast Data
applications, providing us with unique insight into the Lambda speed layer.<span style="mso-spacerun: yes;"> </span>These systems ingest events from log files,
the Internet of Things (IoT), user clickstreams, online game play, and
financial applications. While some of these applications passively ingest
events and provide real-time analytics and alerting on the data streams (in typical
Lambda style), many of these applications have begun interacting with the
stream, adding per-event decisioning and transactions in addition to real-time
analytics.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">Additionally, another characteristic of these
systems is that the speed layer analytics can differ from the batch layer
analytics. Often the data lake is used to mine intelligence via exploratory
queries.<span style="mso-spacerun: yes;"> </span>This intelligence, when
identified, is then fed to the speed layer as input to the per-event decisions.
Scott Jarr describes this fully interactive Lambda-like application evolution
here, <a href="http://voltdb.com/blog/youd-better-do-fast-data-right/"><span style="color: #1155cc;">http://voltdb.com/blog/youd-better-do-fast-data-right/</span></a>
in his Fast Data blog.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="mso-ansi-language: EN-US; mso-no-proof: yes;"><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdQAAADBCAYAAAB2S0HwAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAm1pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzI8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K0ULlwgAAQABJREFUeAHsXQWAVNX6/03nzsx2d8AW3d0qCiqiiGI/1KdPn63v+UT/dmInoiKIGCBdS3cttcAC290d0zP/79xlyWUJl2V3OUeXuXPn3BO/c+/9ztciJxXwwhHgCHAEOAIcAY7A30JA/Leu5hdzBDgCHAGOAEeAIyAgwAkqvxE4AhwBjgBHgCPQAghwgtoCIPImOAIcAY4AR4AjwAkqvwc4AhwBjgBHgCPQAghwgtoCIPImOAIcAY4AR4AjwAkqvwc4AhwBjgBHgCPQAghwgtoCIPImOAIcAY4AR4AjwAkqvwc4AhwBjgBHgCPQAghwgtoCIPImOAIcAY4AR4AjcI0RVCecDjvsdjucTofwx44ddMxKdXkFSiqNl3RXOOw2mC02usYJB7Vlp+8O6uNqBKCyWi2w0RhoksIcL2kiF1k5PzMXx9LyYbE3H2DLXF+LgqJyQuVUYVhZLFY64YTNaoXFynBrgWK3oiCvGGZbwzo22SKtSWFBCeoshM8lFCu7Vy6hfmNVp92C/IJSmM/ByYnSwmJU1Jgbq/JPjgBHoIMgILqWQg9mJu3A/32eADdXHWoqa2ATSeGqV6GmqhrhnX2xZuFWDJ76L0y7u+dFL29tWT5mz1iI7cdK4eqjg1QihamiEu6BUZj20h2Qnqclp40IuVgMiVh0nhqXfjo9aS9++GEVsuuc8DCoYay3oc+Igbj31v6Q/N1uiEj/MWsezbMaKXt2QjtwPH557VY0tSMryUzD0/+eDpN3LH7/7rGTdepKi/DznEXYvDcXoVEhmHzXjYgL8770iZ52ha2+Eu+99Q3mrczEr0s/RJyv9rRfTxxajfjx0+8wff5xfDPnHQwM151bp6kzthq88tK3uP2Zf6KLn6apGk2es9WWY/qbn+OPJBv++OU1hBgkp+pZ6/HEhBfgOf5eTJvah87bYbWLIJM0heSpy84+cjhsROglLXr/nN0H/84R4AhcGgKX9hRfWtttrnZ2Zjbiho3AK/95EPKiQqTVGej4IYzvGQrvwM7oHaSHnQjdpRStuy/GDItF4s5MjL9rMl55/gH875kJsBgr6VV5/vLXj/ORUnJp3PD5W2v4JTS2G6I85ThaIsV/aI7D43R44ckPMGfVkQtdesHfHbXFmPXDekx55iF8/fG/cGOf4JOE8uyLPUPCcdMNsairZdzoqaLx8MYNA6Kwc3sSuo8ZjdjQv0dMWctSlQtuu6EnxMQRimiD1GSRqXDzraPgIyMidAnsZsa+RMycswYLlh1ostnznZRq9LhpdD+orSZIJKcRU3aBTI2XPnsBj06MFy7fsnA51h4qPl9T5zlvxo+0iSsw/t1d0nma56c5AhyBy0LgPG+gy2qrzV/UZcAwdNO4Q6cEdGoF1Ao1DAYtxk6ZgGoSBX62fD6Jf83Yvn4zcmvFuOG6/tDKxbAZq7AmYTsKq5wYOmogQn1P53BEUKlV0KgU8PB0g0EvQ12NG154+g6kHzqCynogrksEKrKzkFNuRkR0GI4nrMI7ny7DPz0DUOaphkSuROfYMNQVZCOjyIiozqGQOepx6Fg29C4qHEspwXU3DoW9LAur1u+DxMUb113Xl+Zx5staRByvi0YNndYBd+LC77j3Znz1yRLsTjqG0XF6pKSXQKuwIrcCGHd9b+SlHsPOxFRItO4YPbo3zZW150TywYM4eDgHWq8AjBnRDVJ7PVav2ohsEodvW7MdE+naKXEKrF++BhmlRvQZ0BdxEV7CtQe370YS9ZOSXQap1HDOPaFUyqFSyeCiVRIBPPNna301Nq7fjaIqM+J69kDXTj4oKyzEkdQCBAZ5Yd+OfdCFdkK/aB9sXL0FVq03bhzVg6QMGupLjKyUZBxcl4fwrl3RJzZQaLyqIBerN+6DzVQPG20BRNSpw2rGji07kZ5Pkon4OPTtEtLE5sCOpUt2IKZzAFb8lYCn7+sPvZwG7LQjPycfx9NLodM4kFVsxfgb+6Eg9Tg27UqGzisQo4Z2pftAAyWtT2F2OrYeSEZUj27o0dkf9dVVKCwpg9qpRnnaXjz/wQKMuluGWN/+CHBXYcOqTWdhCmQeTcaWxONw8wvB8L4RWDL7F3z8y2G4htN95SFHjdlJEpZwSGjTczSzEqGRwXCROpCUnAKdQYdjR3IxeMxQuNhKsSJhN8xSHcaMGQAPnfzMBeDfOAIcgb+FwDXFoRrcvU4QIdKlMthOsCtiFRFWvYsgFl39+xKs2XoY06d9iY/nJtL7sxbvktgv16RA5ZE9mHj3a+dylvSetZmN2LRhO5b+tRjvTF8ArUEPU0kWHpn6LvaklsNkLMdzj76L2WtTSHdoRhVdU1lRi/LCfDxNdTYcLYfFVI2Xn3oHvy7fi7Xz/8JD97+H/775E76cuQoJKzbirbfmQ+PuiZU//Ih//OdHGJvgtpju1mwxoZLE2BuXr0NKtQwxQa744dMZuHfq+3hj+m+YOXct1q5ah8f/Ow9s7ut//w33/+sb1JIOcsP8+Xjpg1VQaTWY99nXeOLV32GyWFBQXIk60kOWl1XRXxk+f/dL7C0gHrwiF7fcMg27M8qx/s9fMG3mZni465G0JU0gXmffnY0c4rk6Zivefvk9zF2fA7mlAvf/4wMcL6zCirm/48F/vI+3PlmApINH8cTDb+KRF2Zg96EMTHvuQ8zemAmFXAZLfSlmfPcXFi5ci1tunYbFe/JQk5+Khx//BPVyA0qyMpFeaaONjwR/TP8Sb87ZD2+dHU8+8ja2JpeePUyUpx7CoUoDvvr4YVTR8dJdWUIdu7kKP3z2Pe57+D28/tE8zJiTgNXLEvDUK3/Smrtg+osf4fkvN0KmVKA6LwszZy7FTrovHnjkc+RVWZC8cwsevOstzF1xDEbSeTvrzaih+6C6uhpffPCtgKnzBKa7MipxZOMaPP36YhhctXjnmffx36/X031ig8hsQVlpDRHoCkx77D38vi0bNosZ01/9CN/O247tCSvxyAPv4dlXZuKL75cjYfUOvDltDu0k3bB38V+461+foZwIMS8cAY5AyyFwTRHU5mFzwEri3m6jxuCV/z2KyeOikHIoDVkH92JZUjaqyyph0boKosVDKWe+gIXXksOBqkoikGX1sJvsxA2J0H1gT3i5q2Ej25uornEI0ilIBKjEyJv6wFXngpsnjMK4Wwcj1FtKBk0ihMbGIMhTCZtYg1tuux5BdO3UF57G2qVvouboDhyoMCMnuwSGQD/kZRQhr6AKmWQklJGRi8zcEjCTHIlUipKUVHw34zfMTUjB/z58Bg9OHIaJE/rDxd0bH331Bv6a+TgWzvwL3a8fiQnjh+P1Vx5AyqZNWLphH76dsQo33z8B48cNx2vP34G18xZiX7Eck27uC7VGgQmTxyJYUYl5fyXBbKxDtVmBQIMTe7duwwdfb8Rd90/EddcPwt339KF5Nyf0Pns1xAjrHI07byFsiCsXWapRbpLj1ltGIMBDi7v/+QCmvfkwQlxF6DFiKF6d9hhu7uWNHbszwdhLsVyP5/7vWfw253Vc30mCpSu3YNaMP+AM74r7JgzG1IduRaReDLPVAYNfEO4i3F11WjiMRpSV1549GKxYtAkG32CoPXzQ01+J335dT2tK+CrdcPfdw6B188Dbn/wfcYtPYfGsZRgwfgzGjx2B11+7H0NifGnuxA9r3fDPFx/DR2/fA0V9MbKL69Bz9Ej0idTBSuLp7v37I9JHg9HjRyNcVX0GpgFE7I8fS8ZnXy3HmDvG4qaxI2md7sHQXtEYNSgePt5uuO32weg7pB/iQ1Vw2JzwCY1EdJALGYxJcd2EsULbtz8yFWtWfADXykPYkkvccU4JlD4+qCgsQ3Zh3Tnz5ic4AhyBy0fgmhL5XhgmEbw8GsSUCiJ4UrMIZbll8PD2xd2TR0NG7NXjTxE36pCd2ZSDzENUGoy/dTS6eMsw6CCJUamGkyxZ6Scirawwa1F25ITFbBWsgNknFMy4hOoIlRqsg9kxs0JWumjg42kgwxMJjaMc3fuNwJQ7B8I5eQzVdyJ//348/cbPqKN2lYZwzJvzPHHUNgTGxeHfTz8E1WmGLlYi+DqNBp4kVpQ4KpFTW4cgTYPIzxDoA88ADbIyc1BgtkGtargtfCIDodaLUECcUIwHGxto7BaUknGRUeuFuyaNhk7ixCNPTEbJsYP4ocgEvZrk6VSkwueZOlThhyb/caKqqhZREb6YNW8Z4qJ9SXQthZjGL7I7oCCRuruLgq60I4hw1ro09GHwckHJCZotEcugV9K45RoM6x2NtRVVSK6rgEtgTEOPYinUShHsThGJ14OxfGYCKuJDoNAQHmcZhlmrCrBiTybCurhg8ZJyBFG9XxI2Y2/6BPQJIz07LaqWxuFNGx6JtBZltM5xyoZ7YtC40XAQp5izbxdUhLebmsbkVBDHKj9xHwjbr4YxOa1CWzaydi4rK4aJRPl33UmYip3EWd9J908F/vjCiL5sXlSGT7gedmo7fUcGGXI7YGaGwmqyKmf3mHADkaW5cEznabGkKiX8fNwgpfunPKcMUfGxuIfuY4dzNF4UOSCWMUx54QhwBFoKgWuUQ5UKL1GxlJG9xnLC4raBshEnydgeCREaDxzem4R1ZJnq5qrB5mXLsSW5qPEi4VMuJw6TveBOuIGEkc5UeFXRS81OBMFBlr8w15Ouy0JNUp/sPL35mItNbXUdcTNURySmF6iJ3CmsgiGLTCajakSCT7zs3X0NWDJ/LQqIqXBROTFn9l8Qhcfjhzlv49c5b2HWV49ARzo+Kc3JbLZDfhoxZYOUyaQNhJt9ESngrpVjy6YTxko2K41djEjSvWnEdmzacpTVgtNsglOiQqi/XtBRspc2a8fg6gFj1lH8teoo3Nx0OLB5K1buyoRcbML+I1nCtYwQsiLsE4Sjhn8YVgximfyU/i4naR9m/LgIb745F30nTsKjdwyElPAxU/8MF8EdSWhOIlwrrA01JyHTZTFrj2ZmJ/ylJPpl5WhOEULCA+GpkCNpbwqY6ZeMcLTYCB9nNd54Yybc+w7BE4+OgYuCzptMgnRCuJj+2bZiE8IHXY/X/3M/Hnvsbrz93pOINZgwe8EOoYqcdM2MLIqE20cKN5WINjPrUGkhKUVeKj76PoEgVghzZ3XYfSamebC1oVEL956EcGTFRjjZCH+RWIm6zKNYeALT/Zs2YxWJmb20UsydvQ61VifKspLxyU/r6H6SwEr42Iii1htN5IJEbQh02oqSCpOwEQG1z3ARAKN+PALdsXb5JhwlHb3BRY758xbhGB3zwhHgCLQcApLXqLRcc+2hJQeOH0zCrLkJZJzjQK9eneBPnE5ZQSa+/WIpcW5yDIj1xKJfluJQoQmT7hmLurQDePfTxVizdgcOVcgxdcoIaGUNe5E60mEtWLAavy/bT+opT8STEYvmBIdH5i9Yt2wtliTsw4FtSUg8mIEaMn7q2SMMCYsTsHT9MQTHRaL80D7Sqe3FETIG2kKcUZXRDnNNJZYt2AW1rz/6dA1GQKArEv5cgq/nbMCKZVugjuiC20bGCUZIWjJE0hBHmJedSfNaiY07stE5vhPCgt1JL0xcGRHzhIWr8duaJITHxCEmzIesgRX4dcZ8lEk0OLBxK4z6KDz54BiEq834/puFEJMOeO2S9fDpOgR3jQzDqoUJWLAyCX5hIejSJRaiknS8P/13rFy3C7uTK/Do03dBW52D6V8sQXllGdYl7EBSShl8IiPJNcZDuDGMVeVYQfP+K+EQyirrUJqXQ7q9jYTtCoy7cxyKdm/Hsq0pOHTgCHYcTkN1vQlyst6dO3cbfAknT3sBvvhpFaSewYjwkeKXGYuRX08i9IEBWLVsK7LrxahKScSWDCdeeHEyYt1lmP3DAmw6nEu6ywNI2JICsUaGmtoKbN50AMmHUrB/TyqOFBgxalh36Om3jEN7Se84C0HdeqBPfDDkZOxUW1mFtWs3E7E7gOBO4Sg8fADzVuxDUGQM4iP9EEBuMT9+twALlu+kOvsxgiQVNcSxz/o1EdG9YmHOPIYff9+E0G5x8JLW4fsvlsGk9cDYUTHYtGglflu2HYExsYjUWfH+h/METBOTK0lPOxGxXiJ8+9V8LFq9CwtXH8R1d4xHvKcdM75dhG0Hj6NH764oTT6AHxaQkdWxQ1i/Ix1l1cS6WuqweuFOWDWuGNg7AkHBXti1KgGfEme+euVm1LuFYMpNPSE9e8fTHh5hPkaOQBtF4JryQ21YAweOHDgmWJKKiQPUGjzQs2sgSgrykHS8hPxIxfDzcEFhUSXpMsXoFN8ZXkoL1q7fi0qzBMNG9IYX6UIbSy0Rj937syCVEddA77HYblHwdlM1/oyirHRs3JWB8NgoOMpKSAQZgE4hnkhLSkZGFTBsUAyqyAJ4w87jiCCiYaeXvcrgCUttFSqJW5USp9OjRyeoiYCX5GSRJelxqFy9MHJ4VxBzdUbJzshACll5ymX0g1SNPr0joSAujhHUvbuPk1ERyCLZQJuIEEEknXX0CLYfyIHOwwtDBncVLJqJL0Vy4n7sJ8tiTxrr0IExkFjqsYP6ZXphxnh26RELd6UVmzckIrfciv5DeiHEx4U47HoiVIkoJgtpP28VCWg16NE9HBpFAzdWT1glHswiJk1KXBUTVZJxGP3JyTCqX78YMgRKw66jhYiNj0BlYR60Pn6wkFVsWYURatKruhFnnltCHBiJKr3clSggHTIT18YRPpaifGzfl0EidA2GDu8BtxPi7LRDydiTnAc/Py/CwUK67M5Q2aqxdXcawmIiYCun4AsaN/SO9hewzE5NQUpuLd0HcvTs3RlastStIkvjg8cLQdJiYnUVUBKRNxKHKFfo0KdPmIBl6sEjQj9BMZ0xIN4PiXuSUV1nhZ6syOUUzKLUaIbW1QAPrQQZ2eUCx9+9dwyqs3OQlFWOAYO6w0VsxuaNhGkFYTq4AVM2qGP7krCP+g+Nj0bfmABaIitZPB9GHYm3B/WMRE1pIdZuTIJPeAi0IiPsZIQlsdGGhXTuTCLStUc09LTJqyopwIYth+kmMGDkiB4n1luYNv+HI8ARaAEErkGC2gKo8SY4AhwBjgBHgCNwFgINcsuzTvKvHAGOAEeAI8AR4AhcGgKcoF4aXrw2R4AjwBHgCHAEmkSgQbnV5E/8JEeAI/B3EDiemk/60qJz3HL+Tpv82stHgNT1UJH7Up+eUWDW5rxwBFoaAX5XtTSivD2OACHA3KjWbNgLHy8duVtRAIkGLyKOzVVEQEwGelu2H4K/rxtCQ3yu4kh41x0VAU5QO+rK8nldVQRYpCTyuEEcuVH5UHAFJ1kF83J1EWDBUNLSC2AysYgYvHAEWh4BTlBbHlPeIkdAcAdiIkapTA61Wit857BcXQRYLmQWnIRFIeOFI3AlEOAE9UqgytvkCAgIiCiak5R8Tvlj1hZuCIeDQlmSb3lj9Ki2MCY+ho6FALfy7VjryWfDEeAIcAQ4AlcJAU5QrxLwvFuOQEsiUJ6fL4TGPJJZIsQZvpS2neYabNi4Wwh5eSnXVRUXIaew8lIu4XU5Ah0aAU5QO/Ty8sldCwhUZh7Gww+/jzUb9+Ljjyk+c/2l6Qid5lrs2n0UNZR28FLK3tWL8d2inZdyCa/LEejQCHDlTodeXj65awGBgvRUlMi0+PI/j8KbMt84Kehw1rHD+PrHBBhtEtww+VZ0M1Tiu993oLLMCj9KKRc/biSu6x2G1XP/hDgkHHpfT5CLJhZ+9RuOUnJ6Fm94yLgbcdcNMVj++yKspsw3TjvlCx4zAg+O7S7Ayvph8Zgby/YVK/HH+qOw26S459HbUbBxPVwGDMOwWB/MnzEHwSOvR9mBbVhByeeVbj54+skJ2JOwAlv35EDiEoRXXryZMhY1tsY/OQLtDwF++7a/NeMj5gicgUB4n0Ho7uXA+JtfwMxF+4igmvHRBzMhC4nGDZSE/fO35iI5KxO/zN+DgWP6IsTfgZnfr4fVVIGf/txFTrN24m73w0iZkHZtWIdsuwG3DA7GrN8SUFZSiNm/7sP9D92Isuw01IvUZ/TN8gU0Fo3OA7fcNhwhLjX46tddlEyhCj/9vAXmqhzMXp6MqowkfPDTBoy9ZSiklIru5z+2YuvWPTiY58B1o2MpxV1jS/yTI9A+EeAcavtcNz5qjsBJBORad3zy7RvYuGQlXn17Bvw8/4XK3DLkiA6gXGGFj68HcY1O9L9xNG4b0wPWUlf8sfEH/LFoK6TuwejX1Q/fk/Ury5+qpMw7UyiB/QDfOszfsRhWSi9kqavFohVEGBUGDIr1O9kvOxAzq9kTpaysCIs3pKCooByySCKSNw3Fz8/9gbm/WxEQ2wUejnpUlFRi4YKNqDY6MFQtQ7XWgPsm3o5Bvc5st7FN/skRaE8IcILanlaLj5Uj0AQCKZTfN88oR+fusQj2Xoo6uwQGDz163TAKt/b2QV2dBNV5O4Rk9+xymUcQBgTJ8fL/zcUzb/+Xcvs6YbHaBWMmm80Oq8VGXCvVc4rpWkqfJzEjN70Yo8ffgE5+mlMjIHFvSUEJUlKzKaSfDR//kICJUx+ENWUrVmWZKJdvFHq7WvHG5yvx/ox34CVLhaunD/7x+J3QOyxw0blg+v5NROwvTXd7agD8iCPQthDgBLVtrQcfDUfg0hGwGvHNR7NhJjoY3mskbuwfhShMwFvf/IE9y+QIix2IO4a4IzTQdKJtCcaOH4yE405cPzCKiGcFwkN9hWTqfqEBQg5YSjqLoCAPOEwWoqxq9O0bi0NLFuK9WjNemzpKaMfD3x/p89bg6b2JiBs+Arff1AvL/1gAJTGt0ZSjlvhXjBjWBX/uN2FwvA+8FW64ffAhvP3G15BDhkcfm4KQkAC4ucgufc78Co5AG0SA50Ntg4vCh9T+ETCbzfhpzhpcP7ongoNaI26sE1arAzJKdH+yOO0wW51Q/I1A8Nm71+PhN5fjkak3Yc28v+A56Aa89uh1J7s4+4Bxt7KT/Tnx89vTsdUWgW+n3Xyyqs1igUgqa/WkAQ7SFc+auwZ9e3VCTOeQk+PhBxyBlkKAc6gthSRvhyNwGgJSCsQuJiEqi+fbOkV0JjFlnYokREz/Xu9BvYfgnee1OJZfgZseuB8jhndrtsFTxLShWvSA/ugbHX/GNVL53xzUGa3xLxyBtoMAJ6htZy34SNopAkWVRmSW1NGfEWW1FsFa1knpZQqseuBwJaKqxfBzVcFTp4BBc3HEpKS0CoeOZF/9KHkU+1Yu15FoVker48TObYfOcJVpaskclAjAYNCiW5dQ9B42oKkq/BxHoEMiwAlqh1xWPqkrjYCTDHKSsiux7lAJjhXUkmGNVTDuUUvtkEnJP5OsY6tra5GUCezPqoKZ4si6qGQCYY0P1CEmQIcAd9UZVrKnj3nrziMoKChFVLjvSWOi039vzWNLo+r1IjtlvqnLVx1GaLAnXA0uF3kVr8YRaP8IcILa/teQz6CVESitMuHXbdnYm1EJb7Ud/Xyc8NUCegqYoKBA+CwAu4V0qAtTktE3Kho6N1cK62dFcb0VedX1WLSrAgt2SxHsoUHvCAO6BRvgpVedNgsnHJT+LaaTP3r1iLgAQSVRr1wm+HBaLdazuEcRucIwvvJU8AXm5sLO2U9L0MqC99spaAOL0SCVSoSMLHbq//SgDacN7oKHLHVdembRiTRpnKBeEDBeocMgwAlqh1lKPpHWQCAlvxrfrs2AyWjEdWEORHjIYdBpodZooVSpiCARcSOixYySvHxySFQaQvlQXWE2mWCsr4fRaEJFnQX51Rakllvx57YqLNpdIHCsA6PcEB2oJ6LMDIucRJglUCrVlJz8FEE8e44ipw2H9x1GQa0DvXrFCSJlRiAdRCAdlKaMXSmQUBqThP5y0lNQbFGiZ+dA2KxW+t2BzNQseAWFQKNwIP14FmrrzAiMjIA7EXkx5RC12RyC6JlGJPiqCp9Efc9HcNncGXFmXDwvHIFrCQFOUK+l1eZz/VsIHM2txOer0qGTmnFTrBhB3h4wuHlAo9GQQVADIW3sgH1XKjXQGwzw9PQmouggwmQTCK2PsR7BtTWII5FwCXG7mZVmMvopwd70cngbVBgS7SHoYaUSiZD+jT7OWyzVpRQ4YTM6x3ngmyNFeO4fI3HoYDI8iUCWZR7A8r3FeGzKONhq8pFLYQfNZYVITKmCgixeO0eHQEYEc/PSVfAbdQdG+Ndi9rzNGDqoE/zIoKkkOwtF5MPaKcwdRGOhkdpgcsrpWjPMEhX059EHM26XEW+JpNUsss6LD/+BI9CaCHCC2ppo877aLQKZRTX4MiEdBiKm46JlCA7wgSsRU4VCIYhIzz8x4urIsEciEEeyuqX6Li4usLm5k0jUBC8irEHVVehSXYe8KiuSS2qw/agNAYLi8sIcniC+NdpRVmZCNYUOLEnNwY5tiTjy134Mi1MiNbkIWWnHsGj+KngFR8OPOOrkxCPIPZaKQRMm4Pq+FOShTxwW7j4E1wITonr1gJ2COSRv242lW/dDp3DCzT8QErkLvKuzkKEKgr+lFIHDRmNQJ/cmpy2mGILp2UU4npoPb6+m6zR5IT/JEWjnCPAtZDtfQD78K49ARQ0FTliTASUsuClagbDgAHgQ16lUKi9ATJseGyOwjINlhNXL2weBwaGIiAhDj0hfjI/T4o4uSsglpPm8MD2lOg4oXLQYPqwPbLk5SKbIRWaLCHWkr43o3Bk3jBwAD5UVCv/uePiBsQh2U2LkBAp6P6EP6ikIPiuRveNhyTqAJTsyMXhgJ9RS8IbMQ+koKLcTd+2H4MBgVGccxqqUMqQm7cO2XBNigl2bnhydZRyqnAyzvp+1Gqnp+eetx3/gCHQ0BDhB7WgryufToghYSUw7Z3M2qmrrcGNnGcKDfeHm7iEQxJboiOlbGWE2GFzh5x+AkLBwImB+UCqU5EfK+M/mi1gig4M4yg1bDkIb5Y9aCmZfYTJDSiJdrUaB3Zu3I6dMhtJDB/DhV38go8RMOlrmISsWPlnrErUHor3lyDIZEOKuEXS2ofHhCPMQQ6VVI6ZrJDrrpPAIiUIXd9IZexIGLBzSeQrT+Xq6azFmeDQ++XIR8gvKzlOTn+YIdCwEuMi3Y60nn02LIuDE6gMF2JNegVuiSZcY5CWIeZnRT0sXxrWydhvadkBCx0wPeaEi1Xrhv288gkriSAP8PcloyI4+OSVQuejhTvrY55/zgJqIdZeYQJTW2uHrRb6xItJvihzoTLF6G8vExx/FjfaG77dMHiVYDvfuH4Mi0u8GemoR8cRU3OiQUMBAO2WRaX7+SoomwQh9j67hpF9W471P5uPVlybDzZVb/DbizT87JgLNPxkdc858VhyBi0LgeG4V/tpdBJYIpTsZ5ri6e7YYZ9r8AFhOUyeSj+VCTjpXwVS3mQvEZPzDeNnS0hqhqkCIKdhEVpZDsDh25lcKomnG8JYUVwotMWkyu6bREpcRdPY74y5FpANl5wUXGzp36GBaQ212wYnibMby2ERWvtUkJlertRg6ME6wGn7v4z8x7cU7icCe7h7U2Br/5Ah0DAQ4Qe0Y68hn0cII1BnNmLs1F+6URWVopFaw1GWi2dYozCI4LjoQ+w6mIzMzXyBwrdFvS/VhIX/YbvEhcHPTCRz39aO6k17WhI8+X4iXnplIkZd4MPyWwpq307YQ4AS1ba0HH02bQMCJZfsKkF1ai7u6yRDg5w2V+szE2ldymMwYKSjQCz6CeJapUk9jDa9kxy3UNuNeGdfMLJqZ8RUrE8b1xS9/bManXy/Gs0/cet4IUS00BN4MR+CqIMAJ6lWBnXfalhE4nleJ1QdL0DdQjGhKYeaiM7QqAWAuNiqVmjg5hSB6bW8Ela0tGzObB/tknD0TId9520DMnL0O3/64Ev98aGxbvgX42DgCl4UAJ6iXBRu/qKMiYKbUYn/uzIdBbseAcBfBCKmRy2rNOTP9JfvrCKWBqKqIqDpw3+Sh+JoSkf/y+wbcfcewjjA9PgeOwEkEOsYTe3I6/IAj8HcQcGJLcgmO59diWLgc/j5eQjjBv9Miv7YBARbsgXHdrq4G/OOe4di7/xhWJOzh8HAEOhQCnKB2qOXkk/k7CJRW1WPJvmLEeALxQQZoyfWko3CJfweXlrqWYalSacjAyx3/uHcElq7cic3bD7dU87wdjsBVR4CLfK/6EvABtAkESBy5cn8R6sm6d3CcGu4eLHjDxeUuvVLjZxlhmnNPuVL9tkS7LGtNU4XF91WrNfD388KDU4Zgxqx10GlV6Bof1lR1fo4j0K4Q4AS1XS0XH+yVQiCtsAobk8vRN0CMMH93surVCH6ZV6q/C7W7c88xbNxyCDod0z1eqHbb+p1tBJhn7IP3jCaDpHM3JcxYiRHViLAA3DNpIL6euRzPPTmBvpPDLy8cgXaMACeo7Xjx+NBbBgEbJQdfklgkZFPpG6aHTu8qWKi2TOuX10oeZZ/pFh+I7l1CYaPYuM2WEwSXRVmSkK6ShUsUUr6d5m3DDgXCLBxQSrcTwSDslAhdiPBA/zDukaV9Y+nZ2DEzJnLYWBo46uC0tpodC+uH3Gb+WLSTgjvUNUlQ2fVsrCzwQ1x0KG4bZ8b0Lxbi5ecnwd+XB9O/EL7897aLACeobXdt+MhaCYEDmRXYn1WFmzrJ4O/tDkUrBXA4//QoMD5xeTISm7LIQnb7BVhUInwU2wi5GZnIKTUiNi4Ceq1CIJpOIpAOJ/1OhJYapS7FRMwoL2pGOmpFWkSHeMFqsdF5OwryiuHu6wOF2I683CLUUd5W35AgIccqXSwkOqeuBIIrIiLrFL6wIP5njs9CltLMQJmlq2uuMOtpJgno3YMC8tdb8D4LUfjiJAoIQeERTxbW9iVQ85PX8QOOQOsjwAlq62POe2xDCDCd6SLiTgN1TnQL0bURQ6QGAiWTywXR6Fn06lz0GEG11WPFmg0Qydywfm8RXn58JLIzcuEZGARzVjqlYsvCHfeMAOorKcepE8V5hTheChjUSiGIhJgSlScsWIaut9+P7ppizPltCwb2CYM/ZawxVZWgwiJHoLcGJhsFbBDbYBMpILWbYZMooFGe+RphaelYLteLoYNymqPTqcHIwXGorzNi+verMPbmESistqOa0tIxBlouEcFNK0aAqxwhXpRjVn2uGPlcUPgZjkDrI3Dmk9D6/fMeOQJXEQFKrn20hLi6OkzupoSnhzsFhW87L2vGdzKqxBjBiykiCkgvFUthrKtH5t5jWL97L3JM7rg5XoXtew5S1hh3bFy1BTrfCAS5y7B3434k7zqIcQ9OxqBYb/TpGoUtu5Ih0Zchskd3wFKN1D17sXjDXigldoRFBsFGBNu1OAUlnp1gqMxDyIgx6ENi8tMLc5ExmiwXbVDFIiqlFFSj3j0CCgpLmJgnh4bOSRUkwqbJs1CM+XU2pJWasJF2AaGUBWdApCvcXSjOMS8cgTaEAHebaUOLwYfSugiUVtZj+f4SxHmJERPoCrXGRdAbtu4oWq43uUSKqJgwKGtykFpGQfApO0xZaRX8Q8Jww+jB8FQ6oQntjX9NHQd/gwLXTboVd9zUFRWlDQHz4wd0QcXhnUjYl4uhgyJRWVGPY7uTKQSjjUTIrpS2zg8Fyfux+lgx9u3aiZ35RkT5686ZAKP/aekFWLRs1zm/nX2i3mzFgl35WJVMGXY0QYgKCYanXgcVZayREmEm6TTlVhVDq1TAy5Uy6Lj6IqfaBT9vKcUuys/KBNC8cATaCgKcoLaVleDjaF0EmJvMgULipMwYGKaiiEhuJ1Knte4wWqw34uRMJiKAx7OJszMg/WgKyolYScjgSq1XYcuOHcgusyBzVyK+/mmJcKyQs8efdKpMv0pF4RqAQJUJqbV6BLm5kHGTA0GdgxCgF8E7wBvd+8Qg0GmEITwawTBC4+EHg+Jc9tlKhkwhgW5C8IY16/cJbTf1TxllpJm9pQA5NVr4eHgS4ZRQn0zM64CVDJssRCstJPI125yw0Tk7yb4dTjv0GiWlgvPGhhQ7lu4tEOo31T4/xxFobQS4yLe1Eef9tQkEUgsoKffRcvSneL1hfm4UEUndrrlTSFS4967bkVtSj6C7g6CTmHH4WD5c3Dzg6e+G5/51G1QGN8RHhqKk3oEQcg0SEUcrcfqjs+jUa2Dyvx/HeEdDQPtxE4dCqyfDJUo2XlBlg0GlxKSnHiZSSkHv7UNhlzSdfYcFcGAZZe68rR8WLNlKPqfuiO4UdMa6V9WZ8Ov2IojknnAjPa6VjKfYdUbaBFRUVcBcU4jSwnzU1NSjc+dQ2KXEtWo8YNC5CFwr40x93N2RXFwBe2Ihxvfybd/rdwY6/Et7ReDUk9ReZ8DHzRG4RASYm8yiPYVwkdpI/2eACyXgZr6Rbakwtxfm0sL0hxc0SjoxcA9fX3j40hfGyVEq8K6kE2WFcXyBoUTQWEOuWngLVRpEpU6qx3hMwX2GPtUuLtCIGvrWUUJw5gLjR2JY5iHKxiKS6YmcMgtfIqbUXuN19PPJ0uCyI0UgcbUTx/fG198vx2v/vftkgnHm1jN/VxERZHfoSLRrIa6U6YoLy0vhrMpEgKKCgj1YYfKpxeL9iRCpytCrRxSyyrORW+kNnUcIGSZRwH2HHe56A44Ul8E1uRhDYtjMeOEIXD0EOEG9etjznlsBgX3kEsMEm11DXE/2tu1YKZJyqnFLNMXr9SI3GUXTnNbJC1r5gNE9PQV02LIjGelZRdT7uWLVVh7SJXVnNltgIk5Tr9PB28sVeQUV+OSrhfjf83cKnOvm5FIUGdXwJD0uE+U6ya2noCQf3o4MdA2WUmjCMNJna4lY2xAa0UmIphQebseIrv5IzynCvpI6lBgi4UbcaiNR3ZJWjBDPGgR5ulzSWHlljkBLIsAJakuiydtqUwjY6IW8fH8xkvLN+MdgM0bFe6OEDJHm7y5EZw9GZClebyunZrsYgBgn2KNbGIKD3AXOWSRqX6YOjBDK5VKK8qQlMa4I14/qgfzZa/Hz3DW4+ZYh2JlhhsHgTX6qdhLTilFYWogQSRZ6R7nB28cfLsQls8APDAe9Xo9HH5Rhxs8bEBDohx5dYqBPz8CmzOMoF3UmfaqKSX8pRrABCUlluH+ous1JGy5mzXmdjoEAJ6gdYx35LJpAIK+kBunldljEKny7uRTF1WZU15ookIEZw+LV8BDi9TboC5u4/KqdYkSGERXmTnJ20ISrNqhL7JiJ0JmPKftkIuC7bh+Er2esxBd/JkIX3PXEvESoqKmBF3LRP8odfgFBgt9tY0IC9slCFEaGB2IKhSj8ae56PP3YzYju3IlE2ilIyMiCXBZJfqpiKClIRH6VDEw33inA7RJHy6tzBFoGAU5QWwZH3kqbQ8CJvVnVMNspxJ1cQno6Jf48UAuZtRZjI8WIDPQQxIosvF5bK4yQMGLKCFJ7Lo3YsgTjruTyMm5cX/yR5IQnJR1gel0WtMFWl4++kWr4+gVSVCjtOYZFjFNl0ZTiokMw4UYzPvtmKf7z7EREM+OqunQkVpTC092LmFQH+bBqsCejEpF+LEtQ29KJt+d15GO/eATalyzp4ufFa17jCNSTO8zhfBO9ZIkwEQejIF9GuYysScmo5kCpHOUU+aetGSKdvWSMILXnv8b5sA2CVq1GnUQLvbu3QEyJaUVlbTU6uZrJxcYPGu25xLTxehaikMX97dMrCteNiMUHny6gDZIE3SO8oBeVo470tYxAs3pppQ6UV9c3Xso/OQKtigAnqK0KN++stRDIKamlEHskMqRoOycJqlQkROLJqFPhwzVF2J9ZfkWHw0SdbZABvqJzPl/jjIDmVVNQfJlCsAy2EHsqslQhNlAHl4vQYzNuXa12weABMejfKwzTv1pMlsYKBBuAmrpqEiszo2PyVyUb5KPUEXO/YX2eXtjmhNVpr2L00+fCj9smAhTjmu4wXjgCHQkBcv7/dWs2tudIKaaslCxJSY9KL3AbBZm3sk96+xqtdihFFjzY3xOjurS8u4XVasFPv6xBeWUd+U5qOxK6lzUXk9mMPE0Y3H1CwALrU6wGpOxcjRgXM1z0bueIepvqhL2obFYzWRAbsScxBSKfMIR07wGpXEduNjqBUDJ/VmNdBUT2erjXFUBFJLZxV8Oy9hQXl+OBKaMQEsxTxTWFMT/39xDgOtS/hx+/ug0iYDSzuK92CtquEVKPiYTsZyKIRcQVkcpU5GDHTrhKbJA4jDQD9qpuWV0qS7A9YVwf1FLAd0bUW63QNJj1rOAL2gqdMiteMeP8mumL/VpQWo2FKbKG9aC6VvIFLs/Ph2vfQIy9vrvAtTbXBmuerRCrY6bg+yMGRuGvFbuxf88+9Bp2HWlQWRQlhxCU3yFWIFRVjsHdgsn6lwJ2kMiZFWY1zNLbeXgQW8sLR+AKINCKT/oVGP1FNmmiQN3LE/bAQi/aRkOJi7yUV2tnCFAodZSanaiVhpLRkVQIGsBexIIu0iEmXZsVztpiIDcJWkU9jlt8kX88nV7ELWvty17eVpvlginMWhpeB3HgQwfFw9fH9YoTVYZpdXUdqpjOspn9CONIS8jC2kn8op2JwWnSLExi33hfJKw/hOCQQAQHel047+sJsFgWOptThl7xQUiZvxFbl1Wj1+ibSU+rRXltDVCYBJ8gEaWEUxGRtZ4xNjFZUNuKqkjfyvWsLX3vdeT22EbOncJxqlXNJ2S4JghqUUkFMjMLMHJovLBD7sgLfy3PTeBgHDZkpRgFC14ZGSMxloa9RO0UncdOqcs8LXkI1JbBo6crDG5RlK5NRy9XeYtvtBrpS2tqVCTEFSfuT0NBEVm6RgQJHNmVvB+YsdGPc9YTFygjq+RmNiQkcs+voc2FwXBiTCLYKGeqg8TusdH++OjzRRg7phe9sHSCcdHFjJnhajbb0a1LJ2zdtg97lxsRN/pWoCwNrrXZyC/yQnlNPq3ruWYijWtzMf3wOhwBuolQVVUHD3c97qRwnM2Va4KgsoTHGo2C8j56CPFCmwOE/9Z+EWAvysraelizVXAhVw3GJbIoPLX1xJEY89FJUYoQXzl8vCn1GAXDV6lUZOkrZc9LhyhM/JpFkYQaE3szgncli4MIpZl8em+9qQcZDDUTbYrq7U0rwapMIqRCsnTiUinH6aAB0QhwU9J66HE8LR+TJvQTLHUvdhNiJ51oDfmx9uoWhJmzVqBqz0Lcfn03hAQMhcG17YWTvJJrwdu+cggwSUxefhl2JaZTZC5SGzXzXF0TBFXgUsgvTU2m+1JpMzvpK7cmvOVWQIDd50cLjRDLKCiCTIqy6hoKsp6PCFkJOoVI4esdDndPL9pcaYQXdysMqVW7YBuDlhZdNzeBhg2LU3imWACG8xUWHlClrCJpAWWSYTaQwgZGAqVaR/pMPcZe1wdl8zbh1z+34bGpY0mfygRsF1dYv+y5fvwRNb6ftZqSlDsRFBxEGyl2fQfZKV0cFLzWFUJAeK6kVYKOnunpJUIw06Y7uzYIKs2dGU4wv8O27nvY9DLxsxeDgINC3qWWWCGWqMmaMweu9jxEe9EL1tcbHl7eFH1IJwRL6Lh6dGcrS2CYWxC5IlEQCsbtn68wgurmoqLXkOmEDpVSs5FhmNEhpRCEBsgVKtxz5zAK2rACCesO4sbr+5yvqSbPs8ARrP/HH9Vg5uyNCAsLRZe40Cbr8pMcgctBgLltkVf4BS+9sjKhC3bPK3AEWg6BijorkvPqIK05jp66XIyKMaBrXDRCwyOJE/IUXvwdl5i2HI4t35IIOhXt3clAiLm12Mhwyu4Uo7jGJri6MGLo6mrAA3cPxbJVu5B0OOOShsCiKWm1LugUGYwpdwzCV98vQ2p6/iW1wStzBFoCgWuGQ20JsHgbLYMAS/m1cOlmVNZUkMSg5fZ0VaQ/rckvoTbNOEbcaG6unjjSjBN9sN3lxYsSW2amZ7ZiJSOcQN8AXD+695k/dPBvbBOjIqMld5UdeWZybWGuNqSCSS+tFwIwqInYKpUqBFC6N5ZD9ZsfVuDVlybDy/NUhqALQSSEKFRpEB8TitvGWfDxlwvx8nOT4OfrfqFL+e8cgRZDgBPUy4TSXF2JNQm7UEDWi3Hd49Cva8hlttTUZUZMe/UHDBx3K67rdcIB3W7Exi1HEdM1Rkh71dRV7eUcc7VITjuEfoM1JIpvuZirzPgsNFwKsVRBL2g5vbQtpEajP1auLi0VDJ/q6y04sLcGo4ZTMAKyyL1mikBQ5QhwcSKj1kJJxSlGMe1v8mpEyCGi2imQGYeRTlWpRleWzLywktK9LRaIqoLypTZXiqtN8NAqaK1Fgl6cxf3t1SOS/H9NeP/T+Zj24p2Uh1XXXBP8tyYRaMh1ywxwmLrscktBZhaySq3o1yuiySaYHp7dDGz9OkLhBPVyVtFhwTuvfYL1h43oHeOG7XszEPvJE3BpMWZLhPT0XERVmU+NjsK0vf7BL3j5nZcwgvJItudipqg5cgpY7+GuIULTYqCR+JD8DsnPkT2cbU20y95JKuLEGJG3UL5QqfT8Osf2vLbnG7uMQg5GeMixLa+e9KiU1JwCa1ggx+aUKkT5G8hyUiIQREZURw3rityCcnz30yo88ci48zVJFt0mfLwiE8EeSkzq60u50xsSCjidWvLFjROI6gefLMD/iKhqmrNCPm8P1+gPDjM+fPZtrDhaC4nThp4jh+PlJ8eT3/a5z2p9ZRkOHKtE/77hTYKVtGETZm2sQb8fmyaom2b/iu0Wd/xn6vVNXt/eTnKCejkrZjPiSHImJkx9Bv+e2AU2IhBiCsez+NflKDaacfxwKuQ+EXjqnzfT7lmG3evX4dfFu+GknI2THpyAfhGeSE7cg1m/b0C9TY4JU8ZjWPcQZOxPxDc/r4FUp0d2iYUsVU+7gemNrKCdveTkbtGJfRs348+Viaisc2DMrTdgTHdXfP3DOtzz6CR4qiVY+sdCyIPiEe9pxTffr0AZ+bIPmzAWE4d0RtKWDViztwA56dkY9+AUDO/ifzlIXNY1gnUo7UzZ5pS9WFuyMELKLDwv1vWiJfturi22bGy+jOAzS8FrrYhJzxngoYWfqhiZJg1ZIzeIffdkm9EvpxJxwQ2iWSFmL2WduXPCQHz27QosXr4T48f2bQIuB5btL0JRvQxFOU5klWXhjt4e6B7qJhieMaI6dnQP1NVtJz/Xv/DS0xPpPLfwbwLIc0+RNXZOVj7uePwJDPIw4t4HPkffEf1wS08f5GZkIruwGiGU7cfPTY2da9fj3Tlp+OTDuyjJQQBUcifSjqag3CRGfDyl1qOEBQr6Sz+eimqLDPFxwWQle6rUVpQgr/a09xz9VEoRtFIzi+EZGIjwQHcU55I/sc4NnjpyhbOYkEMJ6wODfVFfTrmOj+XBOzAYYZSyz0xBPSrqragpJbWP3hNh/q2fxu/MmZyaJz9qDgGZFiMpafLnr72HF977g5zW7YJYZOuidfh8zg70GNATB1cvxce/70XZsf146bW56Hv9SMS5W/DCq7ORk52Op56dCZ9u/TGqqx6vPPU10ummeeX5z2H2CEOUqxPZ6UWCGOz8w6CMkAez0XXIAIyOd8O0139BmVmMnUsSsGRbFpyWcnz79RKUV1Xh1Wc/gTQoDjcPi8C7//c1kgpMyD1yEO9+shBeZBHprm1erHb+MfBfOAIXhwDzidXrXdDdlzY8VsalUkwr2lxYREr8urOUXJwaIhexDRGz2jUY9Lj/rqFYuWYPDiSlndPJruOl2JBigoTc4Ji4OK9WhoWJRRTswSxIJ5jlsVrjggnj+5HLjhhfzFgq9HdOQ/xEkwhIaAOkp8hAOr2ckrhrSZqkxb5FC/HkC9/i5x//wt33vIWtJJlbtWQ32SqkYfoXS5FfWos5n36Le/79LT5+ewZef38x5DoNtq5Zg+den4V/P/YG3vhp8xn9sfvidDuKjP3bMfWJzzD712WYct+rWL0/F6t+notnP1gmXJe4ag3+/b9fcGjffky+/z3MmpuAx/8xDX9tykJpyn6Mu/EJPPD4dCzecOiMflrrCyeol4M06f0eeeYx/PDB/Ti6bhXuuPcDFJD4SU5ivH8/ez8ZVozG1Ml9cHxPGg4cTkGJUYLMo6mU4NqCOgp7djgxCfks2XVeJo7lGSlYeBWSj6ehzOKG5565Hff9+0EM7htELwcK7H3eIsGomwehPr8AKcWVjCWjm9cTt0/ojjWrd+PIjl0w6Tuhmy+wJ60OdeWFOJxWDDFx0Fk5lPaDbuQb75+El568A13CPM/by5X4gcVT5eXaQoARSgWJc2MC9Ah3qYXJaqUkBQ3SiZxaKb5Zl4vSahZXmUktyIiJYvAG+HtjMhkpfffTShQVV5wELDGtDD9tL4OVMsswoszCGYpJTNnTh4kAhMDNQhuMMDPr3yl3DEYN+STPnL3qZBv8oDkEaNNDkcU+fesbPP7Ml0izUJIJSvbQafBQfDr9abz80iRoRLVIr5bj8advRtduvfH1hw8jUFKEWQv24T9vPIdZs6bh4Sm9Yak3IigmGt988zJevqcfjmzbw9IVnLf4RcXj4+lP4X8v3Yf+xGAeOJ6PIaP7IGXrNuTXWbBh3TZE9euObUuWwOEWgWefnoRRsR6Y+xv5INsokIvWHV/MfAOPTux/3j6u5A9c5HsZ6DK/OrtTgiE3jMaQ/lEYPP7/iGiVQkY5N5klJyv1tSQGJj0hPeEwuBswbFhPym7SAxPv18OavhtwM2DQkF5wU4pw08SboLGVUjJs+wnbGduJuMNCU6f+IUKkOBlLsgb/mvo2DP1H4PbewfhtfSnFjhVh1E1D8cW9P+GNVDEGj70Fni5SyMjCcsDgngjWyzCKOOXwSA+s2kPO9uQQf6WL0WIT4rhWM1GMif6MdmQVVMJEAcwp7Ai9PU8XADWMht6ngti2cWzCd/rCpMMXIyBmRhSOBs9+erGe2VZjm2d/ihiRp8Yb6rMUX2fX4N//LgLMEtfNzR2DgyuRd7gSVXZXtq+jPzGSy5x4d1kWJvXxRI8QFuVIDBetBj27hqOspApffbcY/3z0VmxLr8bywzUwORVkLczcb1j0JTtitJWI8aY38GmJxRu5XadThwenDCd3mtX4bf4mTLptyN+dSge/nvyLaa2efO5R3Bjrho+efxc//b4ejw/2wivvLkBwTAAKK82UY5j03sy3nzCX0mdJUTkcKi1iOvlBRiYCIYFaZNDzHxoUCC+tEl5erlAq6s55htk6NZaKvDQ895/ZcA/yR0ZeLZhJZnDPHghT/o7FJH3bkGrCtH/FY/V7S1BVJ8KcOStRJ9JjxJAY2M31CO5CKq4wrzPEyo1tt8YnJ6iXgXJ9cS6eeep7BPbrhtrs46iReCE2yB37xVZ89d4PMGb3wbyf92PKtDHoFkvEt2o1Vm04iDA3MSrFrrhrVDxCRQuwmPSffSJ0KKpw4MG7+sJHV4cXX/wOUS4VWLszBxOfOHWjsTe9paoU3385Fxv9tAgL9kI1c8PQSHBgdwpKq4y0UyfiHRqDHqFW/Li1Bs983ANu3hZE+Cjw1+IdZDHsi5xi0omEBcNB2T5MzXLAlwHMWZewjcfPGzOQmF5FTv0O1FtZ+jRA7rQgwFxNREtLovJzCZ6NKrG4tKwwBGxW0rcS8aWgX1DKG27ZRh1p47MoEED6wuZVVW+DXqcSwoTZKU+YhHTRApKMIFMdCenvHGw3y9oXGqBg+pX1RNtpQ0T1VUp6SdALRUobJEZlG4krq3rqmOlqG6iu0AYdN7bXeJ4u5uU0BBhOaopSFUGB8EdUZWNZNhFGsHuABYgQEwciw6dri9HJqxw9gl3gTeJGCenzFH7BKE2z4L9/pMAkpfoShbDxYQGVGDH1k1ZgeJgUnp6egv70tC4FYs24XVdSo/zj3hEk+l1NAT7UQmR0mToAAEAASURBVOzg0+vx4zMRcDLpAf0votjYFiOFbpXSszxvBfTde+P1p4fj3vvfEtIgMnuI8owc5NHzY/Bwg8NUjR2Jx2CI1iKJnnsHEVqW/YgVFiqycaPb2Bt7hOprjaiorKF1lWDd/CXIkgZg5mv34Y1/vkoMCiU3EGsxcXwcnnj5e/QcNgI9wr2wx1cPL5dgvPDiJDiMdTA75Kg4vBl2q01IDUiP+FUpXOR7GbCrvQJw1z2DUEnKc4fWGzO+fhphrmqYbVKMGBaLssIq3PXkA5h6Uyzcwrvgmw8egrW4AElHiwTfOlfvYHz5+VNwsVXjwKFs6L094OLqjbc//DeCVBYo/TrjizcfRGe/08z9pS647+4x8NaKUF5eDbPYDR+8/SjEpRS71S0YTz0yFjpBFSpH98hwdKVdXRfaIYqUbpj+2bPo7GLF3gOZUFIyZ71chM69++GmwZGXMfuLv8RisaKnnwgjQuzw0hBhI+opJ+IWoac00ERU6Vk6s9ALVyay4vcfNmD1jgIoVXJkHDyG72buRnZGAQ6nV9JDRxwJPTTsQWRcjJ2Ir4URTTomEofKkjJs3ZMDCXHl1UXFWLUujSoSOaeHmr2A7XU1SNyaSflRhdOU9cQKmZw4pMQMpBwtwM4tOUjeS+L3OpIW0AvAzCpSERFBZ8eCeT91bqWdN3uri6ltG82T6LMwBjO1x4j2VXqez8SzDX5jXKrBjYyHwj0x1LsKChuFh6R3ZqP41yaW4SAlA5q5vRIfJhThw7Wl+GmfFaX6CNRJDYStRNg4WmkxzbT2PuIKjA2zIYw4Gg2Jdxs2SGdOnHHAjKh6ebkTUR2G5at2YuuOI2dW4t9OIUCbGw0ZAL3z7DskPfsfUhVemDplNG4Z3huZGzfiwUenI6uKNkekm9b7+kFio83/HW8h0+aJpyb2w8f/ew833v4Gth0qJCmYijZRDRbtUnJl055lba2lVHq7V6zB2PHP49b734cyuhvcq47jvkfew87saug0DTGih183AB5E1PuPGghmWjZhykRIU7Zj3G0v45ZJ07B4cypJ70jEf6L+qcm07tE1kWA8JTUHm7YeJoI0Uog7emUgtuG5SS+j60MP4p4xna5MFxfRqtNSiwdufw7Rkx/Gi3f2uIgrrmAV2t3uT8nHvJ1FqCRRr6vcSnpiBcb41+PY8f24YbyfwJmcHAEjqE4zZny5FoVwxbOP9cGi79ci06zG+OtC4ZQpUX44E0cKaskC0BtDenhi4/pjgvvFoOFR2Lv2MPIq6uAWEkRWorEoTsvEmgM1iNU7sTO5GFqDjnR4Ssz79QhufXQQnBQEIjWvGgGdgqAw1kJOCRSKimyku5NRnFkFjiSRoUOVCV0HxqD0cDZZSVN2k/4RKEzJRBpxVx5k6TggXI4V61Pg5e+FIJJAHDpWCi0F3h9zXTQ9+A1cMJsfTQ31JPbevNaMxx+6nXR75499exKPSz5wYhUZ8chkEowYeuXX3kbp6T7+chEeumc0iXINFz1axsEbjUbk5WbjQGoRNuSrUGjTE0jM5/HMZho3Xew020QJBJMqSch1rRPlPB0WLEJUeBA8KEYzsxBurjAOqb6ulqIo5eK7Wevx8AM3oHuX8OYuuWZ/M5Hu00SbRoa3Vq89KUKtKCsn3bWUiKlcwJttkOtra1FncQjZghiHxupYnCQx8KCk7+QbzjZMao2cNr8WatNBsbRPJVKw0bk68s9mnCuTUuj1GtRXV6Ha5ISejCUlUjl5N0iRu3cbbv/XXHz/5/uI9WtQVdnMJpSU1UKqVMDd1YV2y1bUU/taenZbuqTRPbN+UxIeoHudJdQ4Xzn/L+e7gp8/DwIS3PvMZOjInPtqFifdlA8+eT+i+8VfzWFQ306sO1KK33eUQk87y9FBZmzLlyGImO4Qbx1S09g+86y3J51h+TzdfNwoDq8YKxYfgsTTHRHEldZU1cOpEKGo1IwBo7vg2OYUbN9VR07jDrgqjdi5NQV2pQETJ4Rh68Gqk6JZxhWXFNaiU99omJKzUE+GY917hSLGR44Zi7LgE+KJLLKoDvHVkImL8E5HVYUR5URoK8wSuFBqN3t5KZIyq+DnoSCDrlKY6sUYc30stq1Px4584vb7dcXAKDlmfr0FIlc9KjLLUFFng4+WOOhGikBt89KAAHtJs3CDfv6BpHsjjlWVj8QCI47W6FBpU9KdQ69ltgM5u9BLV07uabaiLPQNtGNotBdtfgLg5u5xQWLKmhKCRxCnGhbqj3smDcS3FJHp2SduRWS4/9k9XfPflcRZkg3ZOcXVnfTUZxW1VovTq55RhzY56hP7HAk9S5qzPJekdE5Pov3Ti4bcBjWnCefYb8dIrDxo3BCS2p3qSapQwtfvFHEGWXxrrzJFu8rdnw5jez8WoUvfbld9EmKZGkNG9ruq46imHee8bTnYeqwMXTztGBgspQDo7kgsNaFXED1AOjUxI028MNmo6bSJRKvdu/vi++92YwpxkqnEKTKuRgjaQLpVFyEyDr1cKSm4RuVEt17eUMvs2LirEIf2mmC0KoX3MbuG6WPJeZc4QvJho08x6UUtdXVkcW2FxqCGd5AXAv1cUJxSSDoeMnJhulWhLwcyU/PQpXdneHupoaDrIyihdaCvGrs25ZMrgQxiIpYuGhFyU/Jw0MYy3CihIQO07vFa6EgcRlJgXs6DACOqLOuPLxFEBRFXD30hYihvcRoZ8+bWK0mSwfh7ej0xwsr0qGI7vBUm+MhqUF6RhqO7qjB5zEPwpKQHl5LwQkY+kSxDTWznYNLLmfEJcdj/pRCF/n48ROF5lqpNnB5+y0SMIB3red4abWKMbBCcoLaZpegYA0nJr8ZPG7NQQgl5rwt1oCvpcb28vYVIOFMoH6lBpyXDHyYYaqIwQiaSoXefCPgFuGLqIwMRFOoOF9JxaomIEjUkrk8GVyJmXfuEwsOX0n8dzEVlpQVBPQMxmIye8sos6BnrTcmrbaSXdkXfrhoo6YUsd1XC0iMYShJD6elVbSJ+9KYbY3HkeDnMTj0i4vwFoyQvP2aUBBxJTIVvZABqcgpx1CsGNwwORGYxZUsJckX3Pv5Qkl6o18Aw+PiqcCAxh3TaStxwSzwOJhU26GeJeDPCzEvzCDDXFi8iiiwTkLtnBUIrylFVTSJEMm4xWsglhiBkxvIqugdcCHO1yh+SbiFYvuYg5i3YiWf+RUnFL7EwoqpSa9GzeyQFfjDjg8/m45UX7hRElpfYFK/eSggwg6X2UDhBbQ+r1A7GyKxwEw4UYf6ufLjLLZgYI0a4nwdxED4CJ8KsAZmYj73MSkqY32zTk2JGJ5GdfIScmJ1j/QWuMSKCCKTA7pGexUsriIV1nekcvW17DY0Sdq3MEti9RzhiiaNhYmMbcZoKZlHqohW6YlaLIlcvYnac8OgVxkIW0XkRAsN8hfoNzTM9DhkUEfcsE4XCsj8f8DWgJ4WX9CSxVGeqb2cWi96sDyciSeTIcncOGR3XYFFMjYzwdxcIaaP7VNOz5GdPR6AhW4xWuD/cSXxrNpmEAA0W0q+xdWMcqJxi+ipIxMcCNjBd6OSJBsFi989FWzHx5oGnN3dRx0zfyqzMBw+MRQ35kH/4KQ9ReFHA8UrNIsAJarPwNP1jFQV3n/t7AnFMzEW5rQshmp7D6WeZVM1ksuPmsUMQGuxz+k8XdVxBL6S5ZB27O60c3b0dGBAigz/lIHUla07GgTAixV6KjJiywvprrjBiyEqjub2NrHhPFmbOT4WJZlmxnrDCZccOJt49rQgiXyJ4J8uJdk7VawgAfvJ34YDqUzN6sgi97gYP4QwjopbT+iELCuF847gszOL3RLGQUQQvl44Au0cYYWV/bOPF1u50Dp9Z6rI6rDScd+L+yUMoPOFKhJDYvhdxm5daGHFmbV1PIQpr67cJIQr/Q4FVZJScvqOVGnJ9qTbaBMtoZiHNNC5yUn+oFVJB4sP8SC+1mEkKVE0uaszXnLXJHgsWUlJB7WqVUujUTdtJXGo/7al+x7tzWgH9/PwylNelYfgoH3qhn/bCboW+r0QXMrLU25dYgpTU3EsmqIezKzFrUzZq6upxQ7gD8QEu8PLxIUMDw0kCeiXGfKXbZBx1A1d8pXvi7Z+NgCAlaGbXxX5nbjB+vp64+46BFAFpNXy9XUkP2rABOru95r43EtUJ4/pi9rxNlOR8CYmRbzlJvJu7tq3/VkqZeI7mU0QjigtebxFT4Bhpgx82bU7YRoLd4yw4hlJqg7tGjBh/Mtjy1gjBGs43twoSkacV1iGV1B81ZhFMNubGRLpNotDsP9Ymi88tJ2ZDSXYN/q4ydCa7g0AhEcYFdtLn67QdnecE9TIWy0QiKTWZrun1KiKo7Z8jYQRV66IgMRtLdcY2CBe+8ZlD/fJ9hVi0pwC+aqsg4g3z84THCREv4yiaK+x9yfpt5Dqaq9sRfjs1344wm6s/B3Z/KYmoxpBx0ZhhLN3bIvzfy1NIx3ppLhPs/mNSFEZg7rp9IL7/eb0Q6vARcqlhRTBUIyIhbwWutZ4CrdQYrWRUx5KwM4UEcXyMiyQlsl4lozFcHBdZWmPClqMVyCqnZ0yuJTcSVxjUFDNXIHr0hFPDwhNOjzrjKllf5eTesuJQLdTki90rRINuIYYGn2sBBQpYT2Eht1FmoEyKaCUiS3kXlSf5/VK8X9YmM8qmegThyU87fWGJ5DPKTTicX0eW+FXoFUrGYIH6Dv3Mc4J64oa5lA+2C2N0h91A7K+9l8Z5CKI09oW9/ZspJRSVafbmbCRlVaC3rxN9g+Xw9fEW3BfYjv9CRJIFR6ioMGP37iIhkk0zXXWYnxikzA+1vl51IXg7zJyv9ESYeFip1GDowDjkF1ZQaMFleI7cYE6Qi4vuvoHjZWJmB4mRh+LrH9dg7v+z9x7gdR1XmuAP4AEPwEPOORJMYM6kSCrnLAc5tdtut73uMDvdszvz7czuhN7Z3kne+brd7uDUDrIty5IsK1ISJZESM8WcEyJB5Aw8hPcQ9j91b91338UDCIAgCdAoiXj3Vjinqm5VnapTJ7z8MQns3Xj97YP4eN8ZfIeGVmaaFSyWzWrpD7aS1suutlNHk8J6/mFaFhqVzShPkervCCJ5inRRyjmWnlxK0qNQQqnzbBqSCRUOX27F3iuDlFtIQWZajGLtio6nwBKbx6ECpyNZtG7EU39TjGV8fLkT5+qv4YnV6UjkwWHPhVYcrfHxEJGM9NRYEZpXeqMCS1k+st20aAyygrho9CQp3qP+9XOzsPN8J07WXMPDK1ORRktmd2KYJ6h34le9iW06VtmOX5CY+gb78QSvrcrzEijFm0WvFInq/msyqGNoAWnDymWoqWngRNdTcDIl53ae8HAP7lpfwpPCxKf3ud3KW1t7cUA+MuKBsGz/8cfv47U3D+DZJ7dMuRIGUTVMFH7jK/fg72n3NyXZg/6BPnz48Uk0t7STpZwxZbihCgyQaJ2sJnG52o9eqnjFuGNpKCGZp74IRQDVhpQUSduulj2uEC4fDdYfpzONw9XdSIntwNpC2s3Nj2cZg4X7/qkmnGmIQFYarReRSipznSwrrFgJ2syIftczT1JlMy0Cey6Ozey0VPTQsMNPP2lAciw3v74EEuc0gzhzE0CT4RZMOwyFxPxj4TIzuHm6ziGMrr4BvLCvFU+sSkAZpfTvtDBPUG/RF1WSo8LiJD7Rp/RTKnWiIJNKTOIZU4HCN2LPdpwd5hg4LKsnyZi0aUaIAMIbR+qx43gTChOGcHd5OIp4Z5WWTh1QGtm/HovXjlZYbHfR8MSq5SXqzsWedic/i33i+LgEZSf4Tm7nrW6bjKcEGgP4g+e34W/+6V0U5KUrlZip1kPGcKzHMFH47a/fjx/+7CNa+4lXPogvXKqbEYJ65moH9lyk7dlRD5Ljs5FAQqOImVBN2V7yR3GKHJWX+SzG6GMS4pkrXgkCvX++C59W1eOhZUmoaOqjW8YI5KalMz14rXBuWse+B5DpNHEw0U4vWdExPOnyNCx1spYfqSP/s4fgt0CKPZ+wgePJkndHZuN39MX8zBpKytMm750U5gnqLfiaQkz7O3px+Ewb2TpAQroHy+lyiFNJXeaLaoBMJGGFyq+EQRqM/vR4CyeeCA+EYdGKTO4cRWXAUO2QAW7YlTV2r0KA+b8qP0zbsjQpS7ZPpJoIBsRJ/iUQHyVoBbaL/yQ0dPThp7trcLmhC5tyR7G+wI0sCh6J5xBRP1A76kmCl2xSRqzbJCWPtboyBTBzLqv0kyzaU9l8zLlG3oYKS7+KZHA2hZS+QiGlH/38fRrjSKYVpakLKcn8+/d//RLtZXdhSVk29hy4gL6BQVr2qsf992hzjnbyYcyR6zXbT0nxHVQru9QcjtSkTCTxTlaujkQFaLJB2qnYt6xkNAlxdmoq+mjX75/31KtTakluAec7z4bSiFCB5VUYL52JgsNHg/R1LS20aJZOKWCuOXLFZaZZsB2wpJwEK1292f7odMKKJM84PSULbxyvxx9QEjgjMTT72lZ6zjzOE9Rb8KkiKFhw7cw1vPZqHe5/JA8fv1ZBIrUcT21PRW1tFz3CJFIqbgSdHQO0V+uiXcpYNNc0YedH17BhSwb8gyO0fco7lgEX7VpG8NmPKHpEaW3sRjgXkhS6Zeuj9F1X5wDN9iWiYt8FnGvx4PNfLqXh9nEm1zjtFoP233u/CqsKE3Df8iwcvtyGX1AlJnx4AE8vBJbkJiA9K1sp4ssd1nSCTL7plp0Ovvkyd34PyCYlOjpGCSk9SCGl7/7TG/irf/clElqbabpJdIN4N1lVnoM336nDr1+rUj6J+2n5a8/RCmSvqEMvpVoHOKfktCb7zShXGOLpgjGJ7NokEoesJDfSE9xBm6ZBwnyF9qyb+z1ke9LAP4meJlJGlfQc1cTZ+W7mYjkjmEZDhLCK1QsaQ8mg/Whh8RoEzVnefNfRJpTAj04w8Et90+jgPZob3yGTmEpeqbcRmM9BlAOENBgWMxpFdLSCM6pcXcZ60vD+qVZ86a5c9tfkBK7MCszan+mtiLO2ObOzYmosUbQuqyANm7cXwlvbjqa6Drz00xr6FaQVn/gYrC914aU36/Dg51fhwa00nE6iE0WD0iJJPDRC1i+tx/zq7Sp86Q/L8NKLF5CXFIFLNX3o5cX/3dsz8c7LV0iIqfieFI+00Q6cbPDhKVoOEk0w21get4OEyEXw0kYEjc5c7cRqGoj/9Z5qvHe6FQuSyOItjkABTwCpNEIuLF69Ix0X4HUSqmub0UlrSgJHLyPXKTKnk+UbyKKTkZ6IHNoqng8z3wMu2nKNifHgnm3lFFJqp5DSO8qS0lTGqtw9rlm/CH4S4sNn61Ff10avRe2opUOGy00RSEhKQXgkOQ1m9ftJcHq9FC7qGqYFMBqTRxeiqTJSnB6JRbQPnZPsxhtHm9EyQHUyzs1hcYBuH/AyMKx3x0zVRMtK131m5JPofm6AXcIKplCREhCSLBYY80GXd8LT+XQ6Cwq3TGDx6tQg+laaxh2EIICL81gFDVNXQpd34BY88fQ8U98ciSsN3ViYm2xHMGef5wnqLfp04oPz6oVGvPTCECLjEnHvOg/+3/9xBQ8/lIcr59twKcKDjfctwSNbqdtKlquMw6H+QfR09/H+NBxLlubA7a/Fe29WIoJ2ZS/TVm7E4jQk9PTi3Nk2pBWm4E+/thQ/+/5ZFC5Pgzs/CXHucGWwYbJNlAVhH03xxXJUfHC2Ha29w7i3gLZy82JoYi9LsWiv59FjMri8FEx48eXdKC3OosEHPeMmU3Ju5xEuQ0t7L/7iT5664Q3J3O6Jm1d7ZVaQTq4/+9Rm/N0P38Urv9uLzz27DZXVjTh05CKftypn2KFqUNHYg4NXulDXzm1o1CIsXbsAi5Z56U2lh5shMX3IDaupusIzogJhGERw0U2iMY6Fboi6yOU2qos0eGlspAndgy6U5Zv3kCwnwkZBQfRYGPQpL7ABMDNa+fVcMSLkbySdC+SQ9as0DxQUBUk9OWiYJnHXx8/VxyhLDBZuARmMXyHRcRqZWUC/OksEtZ0n3jhawT9Rw007BZTuhFPqPEE1RsVN/SuDSnxpFq3Ox5/9q5WcZKPoqm9CNnU/M7IS6KNzmOLptMYjCl1qQIqJuxHEUyCibDHN29ESSTi9MqxeHo+//t5F/LvvPEhpv2a4OAjjkikZSAp4VSz5qPFP6z+UImzh4iDWSyYbhH11tY1u1Ub66YpJ7mroqoxWj5JoQzcjJw+pqcnK2tFk4U2Ur79f9Hgjcc/WRdSt4z3vRJnvkDQZA2Kj9rW3j6o7KjfZafNh5ntAiJEIKY1QeOfrX7obf0shpRJu3Boa2uhv+GVsWrcQxUXBHqGaO/vxAeUbrnbxBBqXgqxM0WUlW5f3myPDYhPa0M92RRqWlaTW1phVDzzZ2SgFmUb040m1EP7z++nWrqcHFdcakJpIO9IeMYVplVZPQpwlRsaIBH3S1O9GrPwNlFNxtkKaGIfIZRVzlLZBM1I0vknh18Bs7Z4yblJdcQN3osaP3sFrWJAZg0U5cchMmrsqNfMEVY3Mm/tH7L6mFKRgZTSdVNP8lxDLWLol+9LnirD3eBvyyjKwJD8CXaOxNLcnbBfwLpSOwNGOj96rUsrla+6LxPK1hfjK16mHRh9oWc8vpaPkq+iim6VtFFhKTB5UHrOXraH3lHw3rjTSByldiCXwlKp3ixO2kkjPtZB9FUfbqcwoQsjHyeK62DmKZQsjZoyYSh20Hm8kFyiRqvx9CV6eUGXhCz5N/L60/ta1U4iqWFISNZdv/ME9+MkvP8TGdaWq32vrmoII6iHKCOy+2Kd0LDNT5b7V/D6KYFCAjP44IyNk82MIA8rdaVBwvutEc9KJ4/uM5CRuTD1obO+gGo6P953B7E0hYHLxYR5UAwRQUzgN0/kruOXfdfIFCLiRcUyVzYgp4R8DxFk5431i3GICMZz2mWPgHUnA0WsjOFDVgYLkdmxekIgi2u2ea2GeoN6CLybG2jNp4D2HQj1aXUakdRffVYbyrZwTapGVeUHrIsreLO8XaErtj/5igzVh5NRJOownnlqo7NdG52Xga9/KVLUfZpmiQgP2lrsLePcBfG1BFnVFhydHTAlFCCj9saAsuQfREUNIpNCTeHVJ5b1PMjeMIpAgDoCnGropQNXLTUROSvCuU4RIhH08EyzkqdbpduWPJJdBXzXdrjr8vuAVtuvf0s4vfVNjycIsvPXuMdX0Bt6HShChoLePUW+zMYwEjy7g+GGCBYVUNrJHA9RK5qlJJ8d8R9kESwh8X028RICJ+p1kzeal0/A/1c9E/c3J1lV6mw4iFcBtJEwHt6qTqpksJUYlAzfAJlwzXRFn/cxfA3+gUqHwT9RuAaV7bzzcokqTTgGoKN5/y+ZjlIeKVlpse5Hu+RZnduPB5ek0OiGSIHMj3BSCepaOnPcdPIdvmea7Zk1XcGx8/8fv4N7tK7CQrrluRYii8Wlhp8qwHLIbWOe7EEm70HwYiQzlC5QpMLm0H6SOjUgIc0ZyshsDWxtpH+WCocG5eK+jDclrgk1aOqUg8Jal0XfpihTFhu2l2s3eygHU+SOxYqlYP5o6MZVWH7ncghcP1GP7YhqbX5VFEXmx3qKn2ZSqOJ95vgcm3QM+3yC8vb14cccRNXZlyHVTFa3uWhvnih+/O9KMy+1U/0qhMz9SBVnYjaDHpvE+NtaMtwitzmEWN+M1AdEVNuktpVtpT1f+s/DpHPJ7c3BruLqmzroFajAWv46RPMZp03a/GijIRCPnWNg63sg8Nn2U99LG9YexxpEN7KbPWnc6Kqmu95Pd9XhuQxpyUyioOQfCdFbJCZt15lwN3nj3AzQ1N3LgBrxwTFjoFiUOcOfT3EYXY2+9h4tU1L65QfaBw3j/pdP4wT8cwU9+dBLVjQNKCCecOzGx0anpihDNSIq/t19rwXEKA7n47KIRCLF1e+XEVVTSooo8SxnRD5XdrZSRdxfvMI7vq0ZHD82TmXFCwCWPvMuuT+OZqL3iDSaVSuFFJQtwdTARvzg2iPNNfuRTmlgUyscGY1GQ3bbs7OVEILp2Pv4T82XiJLyX6gZ5ccPYmDOKPeea8J9fPY/XDpFNTRUf+0QdC9sZQ1bQzg/xTz98FScvNTgTA+/ebvziJ++jx9xMjIzQEwbr4u1sUWoPgYzjP/U012EndQ8ltNXV4p1dB7Fz32kuJvNhLvWACAt986v34H/+P5/DF55bg4JcnoKoklZZ2UADJddwpT2KUrcJipjKt7X+kbgqXU4rTpE/ZWVITpFWPvVszAF1cjXzS57gfAZsFU/Yclo1Trrmr4WH+W4mbqkvK2/8C4Fb6hECv25PoE0sq2AFw9D5Av1ja/d1cOu+0f0ufSSbnKQ4mumMTqdlpTZUUkVwLoQZPaGeOVuDd3fvxuNPlmLnjjrl03A26RsODg7SUXUUvcTk4I33PsRTuB+LFt68k+rIkA+nz7Zi3aNlGG5owY//8Rj+1f+5GUONrahq9mEJ9TzjaZ/z4skG+CKjQUcPMqzR29pDgk9TZ7xbpXgQiegoOpu6cJ4SiCVLsyjSTsXrqz3wDo6inCyRMA4+PyWCq1s7aSJtAGXL6IOUbNtTp5oRnRyHXOqOemImvksNp7RtUy9P8LvrcKyyU6kFFFCeQrxK1O6+SgrN7QEJJ+mmOi0bRsON5yGZAOYpWljZ+l3ixIg+5ZvYhnC6evLj5UP12BsXhmwaqxAW96TCaD927j6H9Q8swz//+Df4T//5z1B5+BBahuJw7+bFOPXpMTR6w7F9bTEqr1Rbp/79O9/Bywcb8PDaEkSm51Oa+hIuVtQhPScH7Q0NKFmzDiXUYPnog8NILCjDhuUFPEGM4u3ffIhNVJ34+N3d6EgrxYK0UQx0d2DXR0eRt7QcnuF+pBbkoKm2Dvmleajh5qxk6QLwuno+zJIekKuENKp4RVNPu6gwB3dvWYQqSvoer/LiNO/qckQYkON53CCUJ0TQsXpDaL2Pk38sCF3CTAlVLlQcs+uS08ftqM04eBTVdWSVV8F/K3EL10Ckqkfj0/DKkRZ8bauLm6DZLXMxYwRVEdNdu/EYiWk02ZxiAUTYlrMpyM5QWKMJtMzx6OMlePPtD1i9B24eUSW+WBqTXr46F9l3ZeNa5Sf49MNLOHegBcmlbuw914X1aTx9VQ4ijcTXk+RCXFY8Dr/BU1hiHE5f8SI/msYe6oaw4+g1JC9MxG7qtJWRNXvs8ggKo4fQwJMpqtrgpYeJd2gIYjEv809d6UWKvwNdYbGoPHsR9311A+5fkcDT4wTfg3Wtau5BR28Xd4fUGogYVQTbP9SPUbJe5I4pnKdh0XKRU7LorMpJWN6plmfGi/UmmXQjtCVqTD4erOGlVPOlTt6DkCgXJlB6OGMYdVf6FZ5JjQ/iDqNt0Z3vnkRy8SLUHd6Hn79+AvEkbL1kgkT3dODAnjNo6Zdui0LjtSY0iY/SsCjER3q42ejCxQvDOFNbBQ91aX/z0kfYsG0J9l/YhUUxLTjbHYG2948i/v/4F1ianYeVeRHYQxWL6no/Hr03Bwc+Povz+/ehaSgab+w8g+ULk5BVUoadv30ND3/+87h0sgp/Wb5gUk2Zz3RrekA2cKIvLRK/4kowndyX5LQMXKGeaBJ1SeUUJBRCTlsSZHtnD4F4M9ZKNh6kuASdz3gziI48W9n1E+eLKsI/dlxGrD0mANOC4XiYDm6pky6nsem663fJIyEQzxcLt6SYW2C2QeeRWAlmd9iymwXZbpVuZtC4dHn9rjIpOEZGjVbyCYdsiCYQ3zjWgj/cnqvY5jr/bPudEYJqENNdeOyJBdQriubJlBdwszjI6SqB3g4eIVF9g0T1qZtJVNkPYnpQ2BniJqn+UicauwaR54rGQF8fWZj0I/rFTViTEYY9H5xH3UAEFq5Ixaenu2hqMBFDHFDNlHyLoKj/n/zJUnzvP3yM6oYhPEYDEAVdbdjfNAA3Z4qYC1y6qgTPP52Kn/z8ImqbR/DN/7gW5988ii62Vw/Q8T6L9ElZ4iByCgdxpG4Y1b3R6iS6nN5kFqTJPbCwjjn82Ra5A1XP8mu2b0wc04S41nXSBvB5P1nWYdiY3I1SEtThYZo3I0tYYEwqsO9cFFy4nyfQQxfYf2RF+0bisHrbCqRzw3H4aJMSaujvpaQz++tqdS3aWgexZkkOlnYnYfP6eFS9X0E1pCw894XtaGnrwWce34if/fQwrja3IqagHPeVlSCV1m5k0bh7+0r8++/9CsvvvhcFKW58wru3KnozyVy6FiuXLcbS4kj81//2GlIz8/H6C2/i/j/4AqIm2ZRJtXc+04z1gBBW8YDk5r3crovdiErIp7Uxqr84NvuW2ouDMuhXi2IEqJJRRzODlc+seeCK1ZnCEaph6FbaiK2KMseSVVI/6HJ6rJnxOlmDmwi35HHin7DtduCC/1biVpWV+o7Aw+/X2OHG8coObFiYrps6635vmKAGEVMaHJCFeS4Eg6jypPoYieo7N4f9K8Snt9WLXTsuwNfUgfqIRDyzLQkNJChJlHodpP5oRmI4juy4SMMOQ6jv9CIzLxI9A8NYuTwFh2jrMjwvFklkT7VebcXrvz2LFj/tYGZQvJ93g4NcFKS35dQt14Zyfyl3l6O85E/MGsHrvzuD2v2N2PjlQsoMyEywz47gryQCUfEJSVhRlo+MhGYa2/biZGsULnXF4u5V2WqjJLNJEVIpKsTUJIgWcbURSImTE+3FQ5dQe+YM0FKFqj4vunpH0NjciycfWScgJhnC2eZU3PXQvWireRnu1HzkRzWi5loniotS4OfpfMAfobyDDPYm4a7t6yGMob7WWrxwdC/iolYgOz0JEVRbEZZ0itydUTkoKSMdG7Zn4bWPKtBNk3GiGyuhZFU5ciPfw+Ytq5hrAMkZGXi0PBXv76tGbHI8nly4CNn06/jAZx7Fzl+/ihWrSlW5+T+ztwc6OUYucpMZHx8XxBnRQ1DTKqsFzqmi360CZk5nvAZgxlvZdT6dbv5K+u3ELdWYEL+93qqyZsV1vG6gGa2XGB09BraZb9x0DdcBT66PEjzxOFLdgpVFidwUGYJMOtts+b0hgnr6LE3TCZtXTqZziJjqzldEVbF/i3lS/RBPjt6PxYtm6k6VovHhUXj+0XU4R2nD8tJ8fGZzBmgYBHnhbdjT2o4nVxejMDUcOw5eQZYrAw8tjaBKDJ320lfo+zWN+PMvrKQ+HW34Um/lqWtk6VY04atfWYoUblpa0iJQ6s1GUin1WgcKkT0ajQo31VNi4/D5B9JQ392EmMZodKb4kBSdghj6WhykWoweyLoP9K/EC3ssMzuHLPFkpKW1oqyjCy7qiCUmeGhof+o6YSM0s7bvo0M4v+sTZNBY+cBgOOqbepCbnUSvK5GT33yRdf2Nb39GEfCv/tkXWdMw3HVXOVnSXCA57laUL4Gf2/Jo7mIxusZqY2xaAf7DX30To7QTKga5JQih//a3nlO/3/rjYkXUl6zdjBHmidXHzMgE/Pcf/SeVX/587vlslW/Dpj46eYxCBK80/vq//BuVfu+6f2vlm3+YrT0wSvN2PfBxjiTw+4vAi4whCYH1Wz/pGeJ4tyiDTlfFA3/0iddK1vA1HMkqcfJuZTLx6zw63vE+I7gFvw66bvrdgc/qFeazcEteXT9djr+Tarct/zT7XTR1RUK6tTcSda29KM2ZneY7p01QT5+pNgSQSEw9ZPPOlZOp/dPKs3VSJfv3LXWnKkQ135ltWu/DFO3Z1HMGD5asgO/QTgzvK6En30RknT+E9ZsfwuDhd5V07NeWr4P/4O94GbkeYQNeDNVcxF9ufYRl3qCFh0yEZeRh+Pge/OWm+zB4+gBGOmmqa/VW+A68jw2ly3hV6MbQ+aMo2fQQfHs/QhoJy4KEAnQceh1/sewuJFedQJuHbJLcbJEiCtkWY0qJZDBdjCUkKGGOlFSW4YSKIvzpBJHy/vLntuOeuxZg/+EKXK5opp/FIaxalqfGjD7hTgZ2IK8xqSN4Ck8w1dNc3K1aA9lx7I2MMjPZkGhYOms0jWNMFHS+3ycjFBP1x5xLo1TcpcZ+nmqSlSCSsDz1Nx3bFk1cdIrjPYjA6Dy2Xyu79WAlGqzW24NbKqFZvTel7VZzrQer3TOHm3wlGtm42tpPgirrGO+UZlmw1qGp1OsUien7SpqXxJRe3kNZfpGPJvcXsyFoVROpT6jBZBBV4071zbc/4v7sPiyZAaIaRtH9upULkbxnN9oeuxexldVwddai8/mnkPbBbvSsWoJRSu8kHN+P1s8/gcTDxzBMQQrvMw8i9YOP0PnAZkS2tCK69jw6vvQUUnbtRT8tOPhTSpC0bw/aPvso4s5dRJivE93PP460nR+je/NKhFGaOf7CZQz8668i9eCn6OL9Yz+Jadg4xDToG8l84LcTm6jyz1h8QuxMgwqFfhFJy2xaq3n1zU+5cQnHutVFOHa6jr5Qy3iPOcBvMT24obHNx873QOgeEJmO9r5hnnAM36OSSxOX0CWYbiboMarzWyNWj93rEdgQCDSsEEkq6mbiFgRTwW/Pq9p+A+2eKm57ft3vEeEuNNN++SiFXsNE8nGWhSkT1JOnq7Dz448Vm9fjITHlnVSo0EcLOU3NXYiLp7TlbQ6tVEPp6uqjSkmXcn2mP469WoGTajHeJlHFKInq4hs8qVIsf4g2cJufe4LEbJgEdIUiVkLYWp54RGzwqSq05Oer9M7tW9RMDmN8y7MsQ5apn2bK+pYsUultjzygykj9VTphdq9fE4D51KMWzIESsjOZ3nbPVgMmn6cT9IIynbIdvBP+//7uLaRT0vmZx+/C//3fX6Pz52Qs5j1ta3vldEDOl5nvgSn3QB+dA1O8QImjq9WKRFCvWs7xrQmIjlfSwCyq1wxdTucjdTLqYxIanS9UJaWMpGsYkkfjkWcNU8fNJG6Br+uq8Ws8Kk0lGyk6XvDb26NSdd9Nod0Kvpl/KrilnMYv5dQ/9rPoucshjueVWRemRFBPnqrEzj17qGe6gAIc4xNTYRvmFXjw/icfKxbi7W617FCHwgax+8AB5Bd5VJ30eLDXzX5SFaIqJ9WlIYiqDHx1Kpevrb+4HZD9mXnDaGBbghBIHXScejdPjkIAdZB0EVKn6A93YwbhtZfRp81Jw5yonkxTbQrVKbpCU/wV7x7f/cc3eCotxEP3rkQ4R//2zYuUP9cknpgpsjRFiPPZ53tgej0gutCiG83zqXXlpyFpIqbf9a8zXhMC/TtmOplzR6drOM5fZ7oTj+R3xuky+ne6uMfUZZz5bsevcap68c+txK1x6l/BLeqYUWE0kCEEVRJmWZg0QRUBpJ2fCDEtNYipvowep0EPPlTGgSE2MG5/EKIklvNEVF5M6AnhHC+IFKio1Dz6RAneeesjFroXS5cUBGWPj49GbZUfP/vBZWXIPihxhl5kwzsYFo3IUVoVGmfgzxAqpQrjpceb55+JUd9rzKSZIiJxk/WzX31ASd5V2LCmDDEUlBJ2++OP0DYxMQxSmGjszJwikvns8z0wyR5wc+WNoFy3LFnOsa3Xp8nGawB6So5XfpJVs9ZHO/5xYTKTMLXk5OiiBoHY9pZ1wpS3myxKK994eMaLl7arNP4ZN48FfeKH8cqPF6/73U99/ZSY6dkVn7hGM5M6KYKqBZCeeKqMd6ZRJEi62eNXYiKiNX6pm5OiGDwcfEawHnTEmF+pezydfhtEdRfTA0RVdm9ZYrj+Sw+hq7NrzG5yDLBpRMgk6abqzHtVUViR6ac1H5FMZOTNCgQd5/GgsKhATdgbYaW8ueMw3v/wCP7wC3fRXnK+cvgseoASxGqWtK2trYsuzIaUvrLLNbt1lmeyy4VTIuYZ58PN7wGZw+KOsKFzkFKhXt67DSElSqyOmcYJHFUw1MoYaVJKzfbUK511ajMjZBxLcBJWI9YgdPZ0gaeK6gI6o/w60jTugH1hYyMgRRM9EUjkqn2NDs1zU1zwcZ1o7Q9mzTrrpuFZbbDj5vNEbQ8qQ/xO2GZ3WBCd6TeCW4Ba+AWR9JO/D1mJdDLBDfpsDNclqKfOVFE15mPF5p0sMb1eQ+W0ImxhOcH6yQ8PGWTA6q/FjhSBAvlYQ8I/dwxKiXdEhQQ5lcggovr2LhY1iKoMEFEhWbCg9KbZKg6jVOKrnzbR60I3Kgdj8fDiXPoNpDL6VBowxbzyTURtRhac6QTpr5/88gNcvlyLP/nGAzTtlkbXbHFKsElPKm2GMpo+ECNpZ/jHL+wkC3isFO508M+FMuJYPTM9gVakptfHc6GNt7uOHTTucaSqC6fr+unYm2tMWCTN18VzNxdGta0BmuCko+9QM8lcQPSXsdYYa2ExU8wfK9qclLIGSdCwR80NcBA8yasjVG7zTwjcYgRmVWk0VqaF46OzdFLhNSCX5ERhXcIofvrpMO6m04rW+kG8c2WIls2ug9uOz/kcAn9gQbVVmI/TarcTn/09FG5JtxCZ+PkzQGHL1Mhe+kulSVaquc3GMCFBPUli+j6J6RNPiWqMe1In0+s1UowddDa34PylekTGJ2MV7ae6aZ9OnPkKJ1YMugtrVowVhJOISseO0HPE8eNV6PGFY/HSQqQl0LABR7AMYlnIxT1ahBBoIndR8muYZa0Jcb0KTZBuENVomiksxTskquHh9ymVGiEMmjhMUHzaSVfqO3Co2kuTW2GobPHj5LVBPLxGrIOYg2vakG9OQa93AN/9/hu86x3Cn/7xg0jmHakQ0/H6KIpE9Muf32bcg8xCSb2b00scqxyXERw7s/U73qx23wq4Ypd338VWfELLYz7EwBOdRN14SvWbyEdGoskdELtj/C8U79fMN+6m1VrgQ7dGqbZKkkaoViMhcrYgL/LPymNLM5MkRlC5osKxIjcSWTFhKM+IQE2FX613sq4Jq1cu09SvrI/yTxhvFlwDq/FXIJpBR1j5dILxq5ODYqUyE4RJtVvKazBTwa3KGQXlb2tnOzmHhq9bOQDMxjAuQRVp3vcpzWsQ05nTM5WTyYkjp3Cp243NK+kfsLcH56sakZydTZ+ZkTh/mjZrs1Jx6O2DSFpRjrtWF2CwowUfH61AWU4SfvrD8/jyNx6Gv7UJXipq5yVH4revHMbmp7YgI8qP6rpOFC4oIGuEbpL0R7yBnhf2ttyZPvZEKd5880NCmjk91VDV8vn9eONoI0boYiqaxCbCRdbvqRasKkpGZsrUjSuEwjGTcU3NHfjO915DaWEqnn50K6W645UNVfFeM14QdZzYWA83Q+NwJ8YrONfjadzlZm/G5noXTaf+vXTaLU4QrrS7aE0nBdEiL8G5L4RTLwFiblDUuGSTLGGcdd2GXufQEMx3a1HR6bqImU9nD4FBsy+dJTUE/StVzE52IZlOMa60DaMkMxLx1T50UbZRtYsZrV/1bLZzAtwCe7L4jd7RwGy1Ddn267d76rhVCfnDIAenMHR0diCO3IWWoRjsq/DikdW0kBOij1WR2/gnJEFVxHT3zBNT1U5+H1lqR+nRWuz2tFQ34+L5CtTsq8XGggialuqj8MoKqri0YpCLNU3Aqx1Yen4envvsRrh+9hpOn6qAq7cDZy/Wo3z9ErQwb0dHDz2CNOHk2Vocv9yKr31xC0bFQPoMBJmEYglKTqpvzaCeaqiqXbzWhXN1PViVMoCznTFYnDiA813AJ+db8bktNKgn0lWzJJy/UIu//+HbuHfrImzfWk4iGcc7U/o7vc7uUYit5NMTfJY055ZUQ7O/bwmy3wMkXhLTn++5hgYvTXTS3ZeMKXVau07bLdowbj6TUJj0RI/VAHnRBGc8AOOnXw+3iKgszo5EZ5cfn1QN4w83xCA/IRztrTQraqLT9RHKKvCCYepcoesWnDdUHrM8G2vhYbbJtX3mcEvN5Oa5o7tb+atN4voiW4c9FR0opfPxspzEUJW/rXFjCOrJU9QzpbrLTJ9M7a2k5y54Ej1ITXSjq66FNmjJpqWv0uyFS5HYdJL3BSNYWJiP3LWLuNuk6ywWFtbCsM+PPipox5DX0dFNAQ/6uxwIj8HSsmIsX5qHQ29U0IScCy3t3WLqVlnPmfjz2ms18bMQVS39+5ZI/2JmjD/YsYooeJxrCE8sjoAnPBqnOsPprigGC7JdSEsUNvgQ/aTODhuWH+87g1+/shuff2YDViwrVsJHQiSnQjCmktfeT/PP8z0gPSBz8pVDDajvjUF8LLloJiU1xpVBaAJEwOgz53oQGINGiiY21p2ocaC1xrWdwAhEDc/CYxbU+ax4W16jJsZfO35NGGPopKEsNQIVVwbgHeBa5wOWZblwspmLmiBkRg1f3uVZ1XsC3IJN19XATGKlG2mmKBhM1NGy5gbyGHh0WQ3Lat9NwC3t6iIHUzgNKbxGEpkbCe7oeLx7qg2F6R7l41bXaTb8BhFUdTIVYqr0TGeOzetsaLgrEsXFhVi2IBNvHjuBXhLKCF7i93Z7ebkejrZmL23SjuLDD44g/wtbKdhCG47VlfjBD67R4GwKJV9j8drZPrJwXIiNcdOPZyv27D2DpsYeDJPfExtGaVIn0hl4lwks0r+PU6XmZhHV9CQPtpXn0LwWnZNeIJsjIREbFiTxToXEapZcxP/mtb3Yd+A0vvWH99LXJP2zcueoJXkn280DPFn0U+FeT97Jlpvr+WS8yridDzfeA8fptvB8Mx1NUKbCsM9rwBTCIPNfTjOGJrfxLKlkIKpMkiJBExHJIUGnyzWr8W78BmQygvNZcIxsGgzfTAAOfAJfl5EiBv4AzGEizkmNVJK8i4pieJUCxFCWIi4tEknuATrBMPJq6AKLUiT8j+3SkdZDcFt12zT+ybQ90G5VW7M1gTaMQTmDuPsGDGtqSYniCN7AJG1wkx5c63bhbG0HVpfOLs8z1swWad4P9+4hMaVqjBJAMrdm0o8zGMRt14ZtG2mXMAI9Xj+2P7QVS9t74SZ/PNo1gvTcLKSKZ5DREizsYodS0CUyORNf/eL9GCQHNyU1EZHhI/g6pUhJhjmZYjG8MBU0zITYdSVo7x5EQnwswlnO+tgzWH/F/iVRlTvVHTt2E/I9M2KmUKqopJ9JOHt9YdwosP9H22nwnSonbt4XcBMy0b2klL/ZwU9Vl3/65x10n9aCP//WQ0ijFai4uHglyTsV3IPkRvz9D98iYYmkEJkx6adSfq7mHeAGIoYnqW//Ea1kmUvTXG3L7a63z+fDnks95IwkWottoE6aZEiM/dn5ZqQHytnSzcXD0lYz3/VoHTH9fFqLjE6wIgyowdht8C2kgVVKnTQptLkiNwqtdD/4qxP9yotUakoUvrwmFmXJ1KZldtmEqhOqiVM2DQaUACyjZRO/S23swaqrGa3abssi6BRVkLbr+Blod1BdbbhjqHUgJ2TVVrOi0u+il+92x+LTqm6soGxJRIRFxuzNuS3PVk2OHD+P9KwoOt+NwcDAzNw9hmwROyzKTbYlO0U6KowszEwKIal3FsiN8yjpT5pkp8eTKD6zADs1ITlBLUGjZOvwoIgkElYJwg5w0f6tNt+ere7mBJz+4irbjP4RopqSEotksmU+PXZhxggqa02vGN344Uc1eKycUrI8rYvZtO+9V4nyvER8dnOBMZtmtDWTA9bR2Yv/8be/RVaGB3/yRw+R/S3CR2J1yhpCkwPEXL3efpYLV+xiZV910iXndsaenj787p2j9ChE/7Cz1P3UXOnh6uYetPaRGxUn6neh57o9WnNCdJx+t9qrQVgEwkxRFMTKZdGRQIz5pMvrV8e7xif49XMQDMZLWqwnHJmeMBw/60M72b0RzNzb7ENVpxsF6S5cGRxVhwep1qBf/CAb5XS7BKb9Wd41Ph2v3yVNBV3XSbRdsgZl02U1KMe7xjVd3IrIO2DKq3Atr3VTp50mZTNSREBpdgS1Gsrd3D13LcEvfvMh9sdUY9PGQuUAeipVdEVGKLUA3XETlbVPAPk4QiRVn7FwL72RGK7gRPUlGIpdak8RWp1sQ2p7ZCoZBObXF92/IaHEMxCiqPT1yScVaKjtp/rHQuNucxqExVkV6ZdkSirHUrJ357kuNXAPVXnR4h3C48viWX/eofKkeqtDzdVm/E9K8m5YU4QH7llBDoYhyXs94aPx6inSvdJWaUt0DFWgfk+Ct29QtVvu+m79V7yTOnkEdTTaQN6V6k9FQbhW6NOkxdrkGNN3gHaWofSEfndSSHtZ1WPmAqKJiF67dD5iVdn0UqXjrXxmeYWPmaQ+Fm4pqQvyUdIG+ofxk0+6FLGUNUutj5RSevVQD411Uo6C+S8xXsyh/O5QtxLAclHORJ07TFIXErfAN9Mt/DbcTLbSdXlZPHW7JV3ijROjepM/VvV1Tl12xvrdrKMF16yRdKtvOAJNnf0kqNQzDqqpqtpt+aMIqiyMKTTC/tgDq/HGu5+qikyeqNIqa/gwThy4gLzyhUinTy3pTKULykbKKUsG/BAXEZeoUsgzCZsYdpDP0dlFtg2t9EQyrenKBbx7qB4r15ahvCxP6WFKHjkRervofonsXV4nUJVE9FZJhNnZEYQvwjxiOUMYH2L4QfRXZWfn8/FSnxf64T4vztV6sWFVIYbkvpa45AMJHLGTOxVCK8R0794qnOel+NOPbkRiYuJ1pVon+2VlUMZFR2JLQTh+e1buF8PQ1TGMTflhyEsiy9eUnpUFuY/8b7lviWIbYsUP6AShn3l9bKcMwhhufORUONlw7OQV/Ohn7+GpR1fRLq/YcI43DUDcmLSxtMVNYxUiyPT7EqKj+9U3cKxjvy/Nn7l2cvx7ybkZpb6p2lirDhWOl4FCEQH1R5YbM9L6MTfVMhkYdHqAIBjpZnZrmdb5rHj9YKBkXYwIE621vutyRrLBlVODQJdj/Zy4eyl7JHAU8ZJ8zMPmWoFLmirT79NlDewT45aVdPJtVwSReK36SzUE77TaPTXc0lDdFo1fo7XwM8NoGGkGr/iWK+mpya9pAv9mBYugxlN/sIQeSp58eBRvvHdEfbANGwrGt2Rkq1FE2DDdclUirigfTRVUgaHqx6K15Uh39eEI9UcjElOwalEOTh85D1dqFp+pZ3r4Ii/aE7D7wwPIXbYGzz1UjjMnapCXk40Ll+qQQ6faF3mvOxgVhw3Ls/CLf3wbC+7bgvXFsThyrApFS8toSmwIJ87UIJP3rn0tzRhwxWHzxjJcPnYWNTTN5R7pxKEL7Vhblg1XfCLOnqlE2cI8VF2sos9PD87Q2H8m27x0QYY6JduaFPIxQExbaad2PYroSi2BvkOne1ILRsIhw0GSkBCHVYWsa0MLTreEIS16BBsLyV7mhqelx4dPK7s5iIbJ9jHuU6IiRuFxD2NRVgxWslyUSSz7aObuZG0PKpu4qfCHk6Aa0zY6chhJVBZfWUBrT1mi16qHbnBt5G3HziN4693D+Mrnt2DxwnxD+EjuNcZmnVaM1EhN3GmVnouFZqrn5mLbZ7DOQiTpaEIWW3nUi66FwXbHJ+kSTPqp8qt3kwDq9FFzpdZfSMM0i1tjXsfrCF1eIVGAzRL6JwR+feMp2VX9aexd5qHGLZFSzCxqxWvcBqE1227lEhAaKZ8ZdN2m03ajBrY6KXiEb1ZSw1aI5M8M4hZw47Vd45cMozyz9/T71NotrjJnQ7AuwOTUJqet0tISPPUw8OZ7xkl10kSVkothQ33Y/cl55Ocn4YN3jyPP7YWXX7PuYgv66mvo5NcH39FKtNbk4OTFNjz37BpaNPEoIaKhnk5cafXjmbsy8fGRatRXVuBUVS9ih64iJjqGwkcxSIwLw+svf4xhWuE5e3k/lpQl4WxNP54uyuJ9yiCOnr5EdRkvLp1sxJq7yqiXGkUDD/GUHPaj4lqO1VNZAABAAElEQVQr6i508s5hFCc/PYsRvw9DUdE4evwq0v78OWRRxVP0v8YLFjE9LcR0AzcfRSR+N3Y6re/ow8V6L+2N0hsO55QM3wgKXCWQSBYlDvPeZBTr88JRnJOGfZd7cLyOajWeJJpPi+bdkUGMZIfuowWeA+yrY9UNeGxVMroo7LXrQi/CXPFUJ8hAfHQEib5c7rON3N138pT+5sluZFZ0M38akiiEZg8ycX/6iw9x9kIl/vSP7kdOTroytyiK8bcr9LS3oaVrELn52SbnIkRN/IM4d6EeC6jGE2WtToCfJuc6eoeQkXp9wxhDzNvDnX8yBc+GaYi7jXfHQyPhyMlICoFwPup29ICQnzg3x/MIT6k07iJLq2HqL3gCq0XfQQA0ibCujPQ4MYtahMKKNxI0ZB2t2ab63Spndoj1bmaQd+ORLF/7XZZEKuAGgVTFHUBnArfAnVLbdZ1UhYw/Uq3ptFtKTwm3FDA7cKK2yzqlrgv5q7tMit7OEMS3CxBVOamup0WjRp4kayiNeX3qL2xXYc2mpubhnk0LEE0pPG9vLy5UdWALnV77qJzrTkzGhk1LsXL9YqxZFI+DZ+qRlp5CIp6J+svV8GTnIS3epdjDI8MurFlVjmV5Hu4uqYeZkoSsrCT0dA8hOTMLG+kKLJJGDh5gPeP9/bh0tZesSBfqaloQm56BjatLsaAgjWUysHhxDp3RxmD1kiy88uuPkbGwBCO88I9PTcfGu5ZS13VirzjS/v37q3GBxPSph4WYFitiOl2p24b2Pvxq3zX8mvciF1pi6FUmHaNRmRiJyuBzBmq8abjQ7qG+bTfyU6JxgFZSjl9zISc9hxuEGGULVsabMTGF7RuBLPZPZEwmfrS7Hu+dHURSYjbSqbulT6ySV/S4SFd5onUjJy0d3cMp+OX+JjTzYl8HUWf5b3/zKurqG/Hn33wIeXmZVBVK4Bi4fcSUVjzx/e++gJdeeR3f+buXlF5yX3cXTZEZ9fZ2daG5jfpqA714ifaESTtVqKk4h1d2HuSYqMaRc7UUBqKgR3uH2oB0tneqTYxkbG9uJQvRKORtqcZ//e5rSrry8Lsf4IW3DuDIicsKXiulmwe48/HRpqgs6j5yASQMDvBdz3wVM//nZvaAnExyEnh1MdKnFP6l7zm6FV2SzyCLvvxTC671a6zRVhrzSV6ZR8Y/M78Vr8sHp8s8MuaSES+4Dfx8Hxe3wDLyqXppHCZ+sdsr/7h8GrAcddbtuBHcBn6zXzT+SbVd94PZbtYx0Bajzc52Ezzz6HI6/3RwB+CMabtCMoy4SOKR51kSrBOqro9BVJPUSfVJdVI9opImulOV3WE6pW7F0HlSInXCqBKTmuZBI0+FOXQoffp8NdauXIaGI5Vo8sYgs6OTi+Eg4nMykeMexd73jyOirxVL77ubijBU4qXRhxiaDhS7vy6eAqM9NNqeEoF9+y5g7eoSWhJqpokxN9mgokLDvQ/xDtGgfFikG8vWLsX5Qyfw/e9/iPsfWoK26gs4H1OIjGQPSpZkIG1PJZYsK0W+34sDtKjkicxSG4bxPksk7xyFmJ453oKnH9uA4qKice9Nxe9iF4Wq5MQowc2yCTGiGhLYt5ys7sDOs14S5DRkpxknQz34pEwYy7gjE3iXuhBdian4oFKctEeigGpCQhBl8qogo5rBYJkak7FvoI9G9BNILMnC5n9iD1mzVFVuswwds6qZkEgVjh4S89ePtuDrd+eS2PQo4aPCvBQ8/fhmpRLj4f32dDcOUr/vfPe3NBvWh8ceWotyusFL4rcVPUy9Y5U81w38toP+SJQvX4z95F7UXbqI3776Afs5Ag89dT8uHTuKKzVt2PbIveR2uNSmQWCePXQUr358FQ1L0pGwYBle+P6LuNLYgZ4uHzxJEchZsR2bM3ux4+AVig168L9863lk5hQj1fsuLlxtx4nTV7HpsXvRWkvTl6+/h32nahDmSUVu/CgWblyNPe+8iweffQyHOH6/+mfPgZz0+XALekCuWNI4jvLjOlBFFawYmrIcb/4ywQzWg44Y59eZz/muwY0T74RqZbMerBwSExUp1zrkIHHsyPTs7htBL/dpFI1gGFtGxXIREG6aLCsTDjmruPUgxScIznzOdynKuFDRJlRZy0ZswpPyPrngzOd8txCoB2n30LAfKZSKvk4vmAVvzc8Ygipo9Ul1gbB/Hwnjneqn6mNv3hRK+pcL94iLZvlo6o+dl/doCn/D8MQzqXj1l21oou9L0SVdUL6Y1oyK4R8NV4I0hQsKqTpAQRv2zLKebuzacwEL86jAS4m1h7YtVfikLmFhQki4J124FWtorjDKzZMr+ebisFoZ0mdaWHgCvknThKLbKnqNq8tyyPrlyY0ny8I/yhIo6lRHYPiL//2z3GEy673rULaJ1/sclS7y/wlmTNDE9NyJFgrlrEdxsZxMg+9MfRSCukSDEuev9aOdk2GQi/wQ2y+DzhUxAjf/pdJI9/K8WAxSxv39c4PcfGQZ/gzFlq2eERq/WZEwSsAmp2ehdzQSqTxpDtMqlM6iKmq9mA/E6ebCEh9LViUJkNUeeRgHh7JYRcGgpv44fHi0Gnt2fII1K/Jxz7ZlisUbQ93gG7kfHqI9YtGQOnDoNN545yAy0hOxcd0iLC/PJ4GcglEHfrewYR8O7ToKz4JVaL18mUrdIyjLdNEAhhexZN13N3XjXEUrorlAfbjjQ1zl93hg6wo861mC7SvcePGDKsSSPfjtP/scfviD1/HVL9+Dl39zAh9+WoPuxHyEd/eig3rPmVTbumtTKV56aQeio9KwODcOr3x8EgcqzyEyqwwjnd3IWJSJ9175AFev1KLbuws5CxcgJrBnGjOO5iNmtgdkkyiCjGtyXKi+0Aa/K3Ncn6B6mugpMLM1uT60ifDLGrW6LA7PLI5GP9fJSEpceinl+/F5L47U0zArqaw6AcsfNkAELeWEm5XixmrxQnO5H/SWrIixPjUzi7HWsWoT4b5+zaeXg0sr29Cn1uxoXtWJDWVZjHRdpgd1bCkRyPSE0/tMHNUpue7PlhCSoErlhKgmqDvVYnWnKtK/Isa9fn1oQSW9EzEWcnZgWBQ+8+WH0dndT2s/dOPFNo+O0m2X2XKXK8BCjCGeJ57aTEInnyPU0Dfi3OZJL4Y+WQPBSIuwS7qygyNMRE6rNFJP+SdG710TWKwxiGkVzp3knSmJqbB5nRK9J3jaPHDFSxajm4abeULnadQtiz+rJLWSvpAP30yrE2+e8tJcYgeSE1LUBNBm0iYaaTIIMymMpDzoyKQKFaxo2UCwX6RtzrxWHgcAxpNRTyIci8OVNdiyrRwbVxQhXow1uA2lakeJKb2K/88Na0u4EAzhILkTx3ni+9HPd6KcLPgH7l6u+mdSAHkyD+Nd+F/8r5/Fj77zSzQlliGdG4cVG5Yi292NXx2qIseCPhI5fGRh2nb/3crSTNe1i3jp6FFkxS1UG5hwDgo3rwVk7IknH44AFJdlwN8fg3WbFyMvzZA4Xrd1Ff7Ld/4jPvdX/xcnLTc94eQQ0OFCd0QCVm4pxD3LU/Fj2jB++Iufw7s//zW2Pf/0pJoxn2nmesDN8SmyBevbarC/hepX5ByEi2CMGuvGgJe/nI0KqexxjQcjTU1SiTBfrQeZvCpeJ+iCRrT11xmts5sA9WtI/CYOWR/cvOwXTtIL+7swxKubrYvj8Oz6BHTvpq3yzmESDBdSeQob4XrV2EkfwmzP0txobMkNR3XHEOp7hnmi5UGGxh/EkbqX/lEbGWesQUYlb2rbdUMDHUnOVgK1LWgmdsBruMyjJTW1MZcGW/2re9IEYMVrgM4ONvOb0YM0MlMa66Osw42vU7omM/E7LkEV4IqokuVaSmLyFI27vE6JT+mT6wkqSd80Nnajt9dHGGFoax2wdfdMVHuqMAwiJ7u4+Hg30mkDUtoxXrAEkE7xzpQCSEXFwuZNsk5rwtJ961gjLrVEkD2dTmnmgHK5QbADkMM4yWN4Eve4U5DEu8im9nY0k+WdlpTEOtgroZ+DB5IMxCD6qMvoAUhUUlKV0mkB9PZU81kSg3EIwR6MSMTRjhFcO9mLB5bFoDgzOI+Uul7opuGC2rpWVFTW4wo9CLW2igP2Yd5/x9IpeyL8x6uxfnUhvvXVbaio7nS0fwLoYTH48lceRUpCEr7+jacRm8J798LLuNozgtIVi/DH0cl0ID2KsvJCjPRR+juGRJPVzygoI5ued+W8L/5MOXdYvP9MprT3V7/yGDJ4H/+lL6chLzsGB2iXmHx1st+MY6Y7JQ9/8w//FhkLinil4MPjz27n93Jh7/6ziKRBC3dyFgnuv0ZGThbupjek3BIaJpkPt7QHFBctOQVrinu5cDfheBe5VySqkVxvZBpYU8GUPhXNCgl62ohOu3pXfy1yyplhxOvyMn/twYofU86ea2L8Grc6VbJe8ttCIthFewAt5HIV3k+tCHqYaeIF2LfvSuDdP4URad+3mqp/u68N0YlIFFX+gKfpceXgxW6EJcdiK+1991MMgMsbXj7QiZMtw9yIm22Zwbar/iNY3SvOVcLoe0PHPD4uiQSVfmm7OxXHS/TOddt1uQAcs65mxMT9zq/k68Gyogjqscfym2powd/gdrxNSFClQqFOqhI/EVEVtsTLL53iPWC0IqiS/3Y2urOzB/UN7dwYkBXMBf5b394kVQoZ7MRUVGOKS4KJqZ9s2pcP1qOuJ5YKxTTYzFO16LFan9R8CJ54vFfgSVD6IDs1jfmpQyoSCAyBAaWrYw4s/WrmsPpPFzARyKugVNFWJfSEDuipKXA63VZW4iW6MCtHbRj6yZZ+8XA7tpX2Y9vS8X2wymagvrEdtbxfvHilDnW8LxcLSCIYlp2ZhPKFGcjevojmCeOw9+AFGg3Zh6ULs/EvvnUvWb/pqKIQmdUmVbmJ/kSgoDhXZcgpImufIWnjSixTTzRHuW45ys1nwOaBIoLOmDctt1L0Q3FRjnosLqJoN8P2+5zjIYySwmUqjcajkccTgYQHHtxsxoEO5ovUcwIF3ObD7ekBsR+dmZ2DzZxP0RUkqjT20O9OJ+s0ytj8cr6pDa41y/S8kDFvTIaAOKLxrhd8M5nlrUljNNKcf3oa6pY7341ZJfiCU+RV45YUzQwVmiD3pr2kivVUi0ugtaR+Pr98qBNVbUNYWuLBl8qj8fbFdrx3sR9PFLrw0/2URRkEsnr7cObikHLv9sf3pWFlRhRONfXx+kzXzqy6WRWNf+K2GxsTqaEV+Kiao7uECbZUM5uROGzuYISTIKYBe71iJlKM2RvcxYlxCx6NxMRgIaLxC2poFMR0oTQrc9Y4C9F9dF2CKhn1SXVBqXFSfeM9nlT538YNhSH1VIU94SFL7rH7V5MNyZPBbQyyaFfXNODoiQo8eN9KfLT3HFmiNOnFk58z2ImpnEydxFSGzwcnm1DbHU0JWsNykSYKsomQoAerhm2NA0mXF9ZHjFBYA8osNyozSoL5LvnswZqYOr+ZKPgFrErng66PLqsmrIapVwkrUUqyrOBS9zUjvDekUFRyOj6paGM9W8iCylB5+voHUUuLSZU1Tbh0pV6dPuVeN4nqJYX5qbibakpZVC0RO9DK5ycnkTjTlnq99+EZsnlJTL95P4XdikCtHTWmFOD5P/M9MM0ekLEuQnM5eQU0RReFrGv12F07iPq+FGU4JpJjUE5F4fwNzAs1CTlnjLFvTEqpgH53zMMxdTPzORd859yy4I0BYOG25rRgJwESIiLqbSIH4Ccbt58yI8U5Hjy8XNrBNYMn2SH+I+NPzauufhp44b48nKfyx9Zy7pHlS7v66FAYWE+rjsF1mFzbpZ3Ba5DRR4xTXWD2Q8g8AXzSxnBewXk8CfB6af0tLI5zX2iCLq9/J9PvZI+z/ZG+NmwudiExiddhM2ChLlDbG3+aFEEVNPqkumBBMZ5m21/nnap0xaYQRFU6UXaPxcUltE1pnAJuvKrTg6DoUkQsrjX5UFRUBPeRCn5L/REDMOXOdA8lgC+cblds3mKyuZ13prXN3dQF5b0GWY6Gc2whZiYsE6YF2YlDVYT41D2x4DUHkPkTzNeVdA1Xnu1BYzAKBuEnDmuSKvySh/mnglvKsVhqUgo+udKCVHcT3n17PxrpmzaaAmHp6fEoK07Hto0lSKdhDrmjlkEtu1AZI7KAGe+i+xpOu9AD+JfffoggR6jPmkVb0clo76CDV91+e9Pmn+d7YIo9oIlqdEE+ZRUi0FU7wGsduU4ZVvd4A9Qrlg20TAHh3ooAiwjbSTmZScYssiOVWHtwvus0Z7zzXecb+6tzahUaqYiozQxQR76M3JCixHAKL/qxmqqF28nefWFfB6KSovH8MkPnVtihLt5pSPkwzrvPr0tE67Ve/PqKD0+up2MRNkqtAxqRowo6enpt16U1UOe7jg/+lUNETEy8OqnGxyWq/g/O4YTjfDdWRJ+3A3dn9aE4Lx/RlP2YbWHSBFUqrk+qpTypPs07VWWmkO0WlRo/pV3tQQSYosnyjZ0FjRbDEFGUNhOpM2XgwF5RPgsx3bvXTkzHqsbIDnL/5U5ERYtfPhZS35vkzPzu1uBkhBllYOELN1XE61Q+NnMFZbZVbLx4K4uRQeEX5HwVQatgUXoTiK6ko2xwRa1EBUsWnKioBOy/VI+tG0uVfeXERJp+tBFPIaKRlCyWOCGeUkb+2YMISpWWFKooMTMoYyjUMmYvM/883wNT6QEZc700xvHuJUrCR3GxZuEwmqWLEikdCTInzX9M0FPXSDIngTlTWNYYv3oWB49mc9qzpDXOAwUVPL0gOKMDY15SNA7jSfyfPlLOu3mqCpbnuCl/0of9dYNYlUIdfOZOpNrc0oIYdScq797BYd4Xx+Jhlrnc4jfWF1LRhdnRWECPNBebZM3hekNUBibjr632qq66jYG6Gvl0vC6lMvOPqrmK5J9AISPZXGOc0boGvBtTmhlRVG3s66dkPgWV1HcxgV+v3+VSzdfXgbVJrVhTkonE5FT2h/l9dQVnwe+UCKrU10lU5aQqIRRRVQmz/I8ipjyZXjzDk+mjZPMWjyWm0oQe7wCudlDAiNKkwnpxjig9COVqdEVJFJalkqXMcefnRD97dYiGGowNh4xHNeiE+AhgHWTCyzMj7fHmOA1MYEd+mdhyXUG6hlzubBspnEFuESeTgsYHQlOPEqkLWw9GhJVXp/OXcaKG09odSetEKYgjC18IpyaeBmEU8A5YNhDyKPmELXe9fI5i86/zPTDpHhBi+cHpZjT1RSHGLUJ85tg3fwxAnG8yV/giyXq+OpE444NA2DJbnCAdN07GQHTgyZyQnI6jqGoaxBEKEnkozSuUcecJmkutprUuzumTtI6WRdOrqwqj0dw5gIPtxim2meZEd1VwXiZG0jtVP14+1o17S6KxMHUUn17pQ2OH2Dlm4B8Dqx23maDrbfudTNuNrrXBsz3aQJl4HbhYOJIqbr5eSjRTAEtYwTqMh1u+mbB5h/vbsIbEdPPCNGTw3nyq/pc1npv9O2WCKhXSRLWkVPRUbSfVTWNPqje7ATcCX+5M9+ypUsT0yQmIqeDo6h2gFF0EYnkSU86MjZFlQ2+MLOHoZpCwuXkiPVw9hMKcSNy/LArth/t5t2PkERUimdXK3KDQI0bLdYdS5uaDDCBFBxmvTPPyV1hCMrh48GdRAw6rok6lQt/TeHny8GIXXj08gDZlNNusmuQVYBIkowr613zVP9adi5GuWLYjUaxPONlo8Qq/zjqV31DEVDYloeKnAneu5ZX2GpuxuVbz2V3fju4+zrUBclTiOZU4dscb3myGTjJnxMw1TAPUCEJA1kk6azjHQ2V9H628aUtlvG9knHD3lNs2epl66WCHWhdkrZDgYhpdj+C1wx3GWkBgo6N+XLzqVY3jMqFgSD7nEuXEb0C8wb+6MRr4OOB0sixFLp5SxZ9tdHSstZaFLhZG3X0fYodbsD69ByuKM5CTm68caszWtWNaBFUabxDVBAqZGOxffVLdvLlQ6VWF7qDZE2sQU55MT7dRz3T8k6lRYwoI0CKLDHbRlRX2byCYQ0VGCoO6F2FyD6UFDlQOooHErXRVtNKLrGOWLWVuLEmLUCfIi9d82FdN4wdk+dy9yE3LL+FknY9g38VBVFANZAvjFtHnqpw2L9b5sJcEuoh3Kquo1B1GwYUk7sZrGhjfMIK7S6hjybgnVkfjylU6X+apmJYZjeCcWWa09WPWXR11JdJ8F7xCg8UClM5ilbmBB+EKePsG8CvaZVYO1G8A1lwq2t3jVaxxWSznw8z1wMV6quj5XDy1CHHRS7cBX7/pLtfJeu+otWLGy6fLaUrszGe1wr4kWJE2Am5+csGvcUs2maLc1yvwmkhIG2TeCW7ZZAtOUwWfz5JgvEu85BEY8izxXALUm8Ijjwy6DdNquwJswFH4FEDjXf2dQrt1KRFWHBzoN9ZKs1K6jtI5gke8k8HXhYKoVqylgH9JQR4yMrPVFaLuJw1vNv1Om6BKIwInVVP6V9i//KDr1xkqDrOpofa6RNkFkBQxHSuAZM8vnlsaaUXHPyzSuRy8tkEWyGdECmNXdokJseG4Z7EbhdQn6+waQhV5OIvy3VifGY4dp/sxGuvCYwvd9Os4jOwCN8oSwiiIMICUVBfiqOy9KD+SumjhePcEnXEnuPAQ89Ywr+j15jPPCRLrah5RtxZF0VJTP840DSGVovTHa3y41kkThfwOerGQb6KCrrfzXTfIimdG/i9tjYSPk3pmJbWjaT7p+ec2US3ATxZygO1j1vKO/RE2V3zc74+7ulvyISl81Eh2KBmI4h2VKOWfDGT5lSdjUGs2sH7XQ34Mq9GidkZ5Ewx/rMmh4Ory6iXoT3A+jc/Ab7zZy9rxj6cqMiFuVtOsqWqt8Wz8DcYd6AuN345bmhAKfwC3ymHgCiCUSDNM1O4AbtkoyBZADiXD9BhkEEc5TRtCVsO0iBYx1IuMiA4ePAbpESsRWTk5SKbOsbB5ZzMxlZbdEEEVAEJUxeiBnFSVmUIafxiiFQthF87GIEJJwuatON9h3pmOT0w7egexl3pfZ2gGrN9P9gP5LsrCkR6R9gaag0w2VjJQhfAVprmQFx+OfTRW3zY4ik20R0ybEMghQRRRvBFuy1ITwpHBf2drBnCygb5amw0Tg0+scdNXK+9FCSOc21QZ2Gn0sNFLnF20mLL7EhXQeO+yKpf3mkRaS6sqQ/kRuNTkB69QlGEDa9xbD2aFne+6HVa8PNAMGk/liS7aHY4RTyt6wujM0/8VQaaszHR1j2LtTKcPbs6UlGGjhLq4Q58PM9MDwjEa4HoTRstsxumUnWwbqmOIhtomCm5bJntV9Nw2k60pYZCSAPVyFneU0yCD8cubMbd0etCvA8bM4paqyxZZgrPyRiw70HhgsuQwcgdqobsgqLitjAlF/QS324GbwAWqXG3JNwsjyzpsmNLZXN0yo7woTh9GLvXX0zNyeMBIU6dSmTdzIcxILYV4iiszIarPPEYXazsO0SA6iYO6FJw93SBErormAr090TT+vgmFhYVjVGN0bc/XdeG3RzrgD/cYLuaihZ9PEXyxv2sbURZBMMedEFSJ6+gZwi8+HcDDaz1YWxSJ442GoMAAWcCdZAcLO3bXuSFcpd9WVkPZHpbBJYrl3Lfxv1Haux1FB3XNxIH7rnM+VJNo5tGBu7HLExIrA5KDk3/E7JpMgggmyj2dEGsVwTjJI8Gqq/Ea+Gum6/wqgYU6umjNiGoxPEcG8s7AkxZumgFQ8yB+33uAJx0Xl3511aJXfGOCWOM/dBfpQR86VYMak3qdYubknMW4pUXXaQSTQ+YIGWn20KT6XOM21reMoWqeCajL7h5BWuwIUuLcSKFaneiXyiEtlsKMc4WQmr0wcyulcVJNRHFxEZ59PBytdFGmF3KN7Hb+yo5JCP8zj61HRlocCsiTH8+faTX1TV881AZ3bDKVpQ2zgiKIJBZYAqwjozXOcSTpQtiEeI1Q5PdYzSDd1cViUXI43aQNUyw+gqYH/WgYGEUxT6r9NIbdRVdy5flRuECWbno6LYnQ3USzd5hsYBdamLeReUskL+HJmJbzqiK+fBE80jYh1JG8aCnhneswWb7tJMSaQEp9JDjrasQGJo/FIia8drpEi6Xh/KEIWjqitOGzG8UCkYakS07/91pDG7q6+scn8tMHPTtL8lvJN0tLi6elqHnfqjP1kWS2JdPNT7jyjSobP5kh5ji1FiD7uJV0e7CnGXNJUjW71DY77IXkYwa/W2/j45Z5GoxNCgViJN2I0XEah35XydPCbZTU8Ew4NtwSExq/A7fK6IQjkWY+q1+c5QJlpBfoHwxb8+ijODmBMiQxPIV6FAEVHWFRtZtrhFR6QMKMHj2Mk2qCMiRfXEwCJLocsyiINZX1a5eQsBqqHKHY0nLP9fYJWgmiDqZI24lAjlyrGMNDDwr9O7Zxcn/qpYH2WBLgMFprb2z3oaLDjWwS1Hcq+sgC9uAJnlpFvcbvG8arzYPYc6EPaSs8eHYdbQyT6u06PYiTV+j5hLpmT9ry1rUNkr1F9060lCIG8MXsYS+JrZ+DuK3bj0oS7A2LY5BQ1Y93K8n3Zf2l3vJPaqxrbbQlVATzkkIP0N+nKGLHcZBLe05QafxuSlKmJHhY6MZDT28/fvCzl5GZG9pi1Y1jmIUQ2On9fT746Ov2f/vzL/BKYHZeiczCnpu4SmT15CdHUvq+BwP0JmSMd00aAvNWj30nMEMExhkbIC46JQDRgKQJrhOuhqfjne86XsPV6fpdfgO4jNjA+43htuOQ51C4JT6AL/hZ3qbbboGrgxxO0mIorFlSzM1lGukEbRPz4CJrT6g1WZebC78zSlClwdIxomKh2JCz6B5VBkJkpEsZm5APN97ldjXdgF3rFpNmLkW01EfkODbuE/QEZayeGSZ1kvZKEDy76FlGTpEjJGijpEivHu7mOx1R03j1a5/20FA+czF7P1m6QrBGeCf6033ddJZLtjIJJh1GKPCvMm8cJXkFVh9PoCI631XdR9+fJMaCl75XXzjQTaIvksc0ik08AqOfeZU5Qcapapl1lPpJYHRQ4PhWQU67UkAGuNjcHDYL+0bduHCtG1sSxDKJA5hRdEp/eyntGkefotvvpllDSxR5SiDmXGYOBUo2+7D7PR8GuWGJpV7vfJhaD8hwVGPUVkw2x2lJHpSntGF/q4/eW/RdqpFJj3VdTg1pW3mdboua8FHD0ZwqZ2YnPP1ulON64KiATnfCCfV+Y7jNtcAGeCq4pZjgl/qHKueM0++6zoFm06wiBUlyk8itSU7kOksDD3dQmHGCKn0zEcG6nX13/R3QCK62eXnik3tKDonAKLCqrQfKRBE+mhCToEkP7c1b73Iy7TL1UWWw6Tx+lmnnodIeJyza7j6ekAWWmVcMUjGbUY4J/cykYQwTRgeJtM5rYOVfozr6x8qv083kgFSwTlC/TA2LxLV26rnJBbFNGTso2xRehpVzgFHqokldTWo+hfJzMat8EzHyIXfwxj38XGzF7a2zCAkevNKGh5bTKLopHS5zOpau/dbT+MGV9g60DWUo3W3n1JUxLvPEGW+1SE8iazJYKcaDGW+Vd+Z3ZA/9SmKk4dszOGHpd53nBnFLcQEZErfg0Ph03fS7pOk4edSAHPHyOl7QRSzchB02MogyXmFFiZ7THRZuCkGds31EguGn5Xbx26qtIanxxD+yIE4m6IEj+VVZs5A9XqLkXf454QrNkqDjdTmJC4InEWbQ8eqXf5xwNQwNUwi1BP1uvNnuWM22ajiyaIm5M2GHu0Rpbj7M98At7wEK6fFkf6iiFz285vjMhizL9JyoU+RmpePegkq8VdWOfiSr6xo17s2xLPs2PU9U1R3z09rXmfFj8rOQCcqAQ2D6XeA5tW0kTtJ1vAVfJ0iaPEtg3RQsDdBZV2bRSarMNHBbuAQfgdnfrbrpeLUGSQ4D60S4LVg2gJLf3m5bkuKmZVOSt5QeqSJsPrGlWndCmCeotq8ohCaeMkFhIz6eUMmSIy9Un/8CAju2AhM8aiKmB5MmXhbBNMsG8hk5hXhJ0G6kZgK/xq1Yu/JiIp0Mbmm3csVEHZ5ggxZmAybx4yWvO4oS3yI0NR/me2C6PSCOFlLiPLyS8eDVQw347MZsdcWkZDcSk1Feks0rk6vKZ2j7sHicoZcZNa1sbEo9IR2V0HNBExFbCSMnywmd0XNJIg1QwfPVeJOMZrqJT/2Yz1I2KDDeSNKlHRn5esO4BaEDrK6Ds+06o9yxSpqir8ys226AmUK7TdyyloVRx3RT4QhSk0lQeT14p4V5gmr/ohwxOXQk7UEX7zvjuAOWWWEMn3HGor100LPOb00RHWHmcrxaZZ13LHpwj5ffKuh40PkFv54wwmr00ZegOAlQhFsnmGVD4Za72GGeTD2ULxNLUdMJJ6rbcamhD3+wLd86VUwHznyZ6/WAmKxTKs7Xyzgj6TI/ZNFV82RGIE4EhLhIHcUfcUpKvFIhe/lQPYlqjhpTIhmalpGFldwVx7qu4nB9P6oGUuALj+UthcghGEGPcWuDbB/TMmnUrpO/Ol7PEfNdb3SFYAYF5zphn4AqIwswTgi1hVvi7XgcuKyJOxO4iWrctmu8+tdeJ/0s5S3WllTcDJNpN7NKdwz7B7EumY7BC9JoEz3OWIM0nDvkd56g2j5kGAVkEuPjsDqjGbvqOxETn6IEgqyBLXnVRDImhyrqmFjWoDVnnGZ9CAtZBJDsQYxMiMCRBAuMHsAcqJIiY1gEWsamq2K2hMCEMeAZhQSG1EkIqBBHkVru7O5EHAe0eItRaSaooMmt44h5hErXOQmGBagwfcS20q/zwAVqoH8AF5sjeKpoxGc2Zt2RE+k6vRCULJ+4d2AI1S3e4P6XXNaHNosYwyMQP967WfYqLXLJ9eKZq53GKjZZeCa6IPxOXJJH4kyYcgXQRYG1M3W9SOhigsYVqpwuK7/OfBInQccbbwYuK34Udc19PIHS68iQH8mcp5XtI3j5YD0+t8kgquLdKouG00WoLiW+HlcaG3Ghk95bfB54RymhHsbljoKSsg1QuKSe9Omr/ilCSsJLO7Mq6HGu56N+H7eSRjFzOgfaovtCCI/ZPh0VEo9EalwziVvgOvE78TDLqFI/oophhOEI3KqLlNcA1HNQKxzfihl0slrHuCmnBaSFsa3YXhqLtHTec9PN450Y5gmq7asK0YkloVlRmIS2nkac4eIUEZ1gnKr04OZACSJC5sDRLCI1WQnT0Bjlg+QnVUxLjqLx+lgazTcQii7q4ep+NPXTqhIHumbt6h2ygHVxZ51BE4btvTxZClEUcCY+c24Y8M3Ra8QZfxV+W16D0LN9dJskhqm7e7ooYRevBraGqXEbNZS/BgGOGenG/ioXjjW3KOIeSJ/EE+vQ4fVR3yydQiM+/OZgA7bk6V6aRPk7MIt87/PXOvGbo73U9RXJaTLV9M4r6Pgijddf2vyYY951B5lfP6JYRVQdHzATnOWD86sBJFEh8Ycqa4+ji7/STfigQgDQcpcVJlfXiXELMDsueY3l+KVutLIUP4rEuDhcaRulAfl6PG8SVblPzcjMpPcWD5Ip+VvS2oKmjg409rTRaUQkhfaiyH0SE6ICexi9w1E8xcaRzgqxjTCEEe2Yzcmha6LrrOdMIJ6F7EF3QYg4e5JVngB1vI4z5mygF24It9TDRODEoxcVWWFGueGWSS64JZ+ui9EMo6S0PTjeSFV/NXAzSvXzUD+WeNrxQFkk8vJy1Rqrr7ZsJe+Ix3mC6viMojubnpmFbb5BDJ5rxnG6Q3OZzrPDeYJ1MV12VyGGv4Kkx5P+FQPz4ikmKS4CK+jr8OiVXgxy4i4r8WANbfv+aE8Har2yoDpGKV9Tk6LwrQ2x+P5HbaDfZGVO0CLUxCY0Xgytq6JciOU0a6P7CqYMfFUXPQP4IsapY2Np6Ku3lypOCSxjnJN1Ft0lAtff34XliT24MpjLRYgGCQRJqKALh0h283Ag67WcIC60jqC5pXlcMKFA32lxwiXop3FwD1nvCVz41VjS/WZ9QCvCbL75bvWz+aAJsCaIxtfmQOBpixuyEZ4i1alMZed3poS1DJIwWTQ5LsN5nJVFVC/egQEk+Cxk6jmcd14jcqIjrjA+y93lKO2xigETI+g6spx6tL1LBhlQ9mAHL/GTaLuA8Mmir8IIOS2xuNgygl8fqMcXNhsnVbk7FaMtYixATNdl9/bQOhr/9XlplH2QBNmnzN6FsS2VNC6ypz0GQ+G0E2uSWQGt55ne+ul3A6/0jFH5sfFGDt1SnU+vF/KunyWnuU1WhXReDdP5bkC+MdwGTqN21ibeHDPSInHMHhZGs6cmMl2XAG55kp7SOYwU56dUebhWxIx2Y3VSBzYW0ZhOUSGSaAVpruua6r4I9TtPUB29Ijsn8d/pScnCtaEwOtZOVlNgeJiOfMkiEXUaUUzWhqTlXkeCXpBkuqh3c8LJu1FGWKY0IXi+F1W9I8hMica/fCAF9xVH4+dn+3D/igQsTY9Udz3nqnpxsH4IT62i9RB6onl+SwrO1npxsnMUjy7xIJHH3D7qoO44042abjGOwAFuEjrtB1VPFl0fo1rGsGeNOKgjFGusr7+P7pC4qLNdegKrBrAf+ukIeImnDYsyY3ChmqxbSkDLEmAE/aunkhk95ic4n4uSfdXdyYiJzeJCTg8+1A12rrNjQEwhQrG2CVDD1Gv0FECwb9gmAhhv7zAVWGPyKtDcZNH+rH84gqclGzEbk3l6EdLmEX8P2ps6kJpfAG99BQZHYuiguQ0phYvhHu7CiT1HUH7//eitrURsOv1L0sSkIsJSP45zGQ2iITWiiJfcQQ6i9sQ5ZCxaphx39zZUo625FZ70XKRlZaphEc6jtyKu0vlmx4cZQKzxOb0WTVwqLjYW55p78eL+a/jillzFUZJxIJvjxMREzuE4DKUZtqP9fr9SW5K5LDIFme2t8F9qx94WttVF2QJrfBs47cRPYtg9KgQISvD41m9mNkKzxZjfXqcZv4H0oLxMdL7fEO4Q8NRHs1VGhA6lX7g8KPVwZ18IfmPrJHXW9TZqZbyxBB9kfYwa6UORuxNrMvwoy+OmJjdXbXLuREEkWxfOrKUkO+C5/CxrwZmGAeqFxtJhsTFgIlxuw+C8LLQcVTLYJUUGkD0EXo0n+St3pzqfLNaR/NfcOYhj9X6sTIpAXLQLuZ5wHLjQg8SUGDyyMgG1HW2oauFgpHH9isYBCmEM0WB0DLzdPnzaMkQbwUl4fNEw/uFgtznIjVqEwh+oXyBVjDaIX8K+vh4uLGLVSaaPpPO+gz/+gR4siGninUcconia9VcMYYiWnWRvGhz0hDJga6KsMelJaWw4WFr6r68Fw21XaTgjAzMp5xdFLz0H3jyHnTQb6aErPDc3Rl/8xkqk0g7zkJyqWHHpf9VSVlA4B65IuVPjM9mI0gdRUeGoutCAPjp2LsuLZd/olgS3+kbfBKqf/S5CNnozFliuBboTr9HPgfhx3tm/4bxDbL10ADte/AiP/5u/gq+hBh19Sehrv4To3MXoqjpDe9LhGPY24r0f/A0WP/2nWLFuEXpbrqG7qxeepAy6ARtER3sP0gpKWNEudNRdxtn9RxBXVA6Xewindu3AcEIW+j89gIxVD6C0KBGdbT1ILyxE9ZH30ReeioXlS9HVWI/olGwkJBrGXox+G69tRmqgjfp9nLZafcRNME3WnW70IoLs3+c25CBaOR02yssiLv+EHRzoa5mTo2rzvI3ZwkbbsK81SdnuFrvYekNg1cWs8v/f3pU8x3Wc92/2fbAMZoABBgsXcBMlkrJEi5Yik5JNWarELjs68JTK2Yf8CTnklEMOqUpVqlKVquRsp2ypXE7KkhVZcUJtFk1JJmUKJEWQxL7OALMDg/x+/V4PBsMBDZIANQN0Fx7evPe6v+7+evm6v63rS65LWI23/mLjL1ahOnQAhTJbxya9nxOQChszfaS8CW9zAKq+tG44GZ6SHM5AHi+CgwVLhzWwwtGjFDp0qayyWU8ECTQCfxg/cHIfceQl6cvKofai7I+HINNOSQyLmQDcC+7mnamFk212PaiBtvq9DBnjF9ASdDr91oqNFeIgs/5U9didSFKrq0j2LIRqp6sZFMpZvf2d8lS9Y83BRaELBDsDg/WfXa7IUKdH/KWKrKi0a/IhDk0+h2PcPvhyWW6C5RucW5G5uE86/JCrwtdvzOfCigj2eRybVvbVuzUh6EzrPtqvGYcuBsu0L8XOke4MV1eK4l9dkCeji/Ls/jZJ9fdLtlCGMsg0rrTaQdvQ6m5VoHXvrUcXiDdpk788L6dCY3JjHOfmOLCz2cZAtM2BhXfmtSPyjeEQPFW5ZOmrCbmx6pdef0nGoThTWlyWGzjQuf9Yn5w5Hpa33xiRmbxTvvPqsGTvTMqnX6Tlyyvj4tk3KH/z10cUwdc128aiKlA887FkywPvgV2faU1/2hhXt/x6AvdKTm5dm5Thp4/I6OdXpafNOtjMiQm8gknz9rURSZ54Tcavfiq9J56VuetXZXm4TT5+6x2pFBbF1TkAwfeUVFxrcvv6bfGU7spyLi9pmD+tYhzQ082qC0cTnj4v0ex1ufibj8VZ6JGZkWtyZ+ykOOfGIa/MSVvIJZPX/4jjC0Wee/2CBNzV0bKxCvVP61Wxvmyp7mAvgoV+8cacHEvOy8n98Xqo6pmLJh34m9yovlS/kKgG3LNycaok85U2xfXRi0Ed/753DfaestupqsSUz4gMbXuhAhRY85xXVNAwHpQ1otNpODa46mSwIW981PF1PKTj2E95cnJmKADzNpGZNOTOy3MymfdKugw/4lA+y1c8cHpjlZdohC85CbjKEnCU4OC+LMlASbojLunuIKs9Ke0dMcUdaDYXtLraO3E3LN8GWC2CtbkAp/UUS1VZO3Wd1XqsewlY+o1eCbPvchrRU4maRLEzcUF2tR8s3vnZIuQKPvnxtzslvwSn+HBqTxhMT8+N5D46MLFx3j1/skNeTHnkGgZ9yI2dJJzqM15VfLZJ/nhtBV04/azuPEUnBxZhXsKOJenzLcnhpEOGeuPSneyz3Uhm5JWBvMwvTKxXcAOMzR+42r+bdctn2QHpdC7LywNZ6QrFZWwcWsbqWLrN0z7wF+CKp+2888Yf5Bpw603E5YffTcj//uPvZNrrlwt/uV/efueWnPvRcXn/3RG5dQm4jXbhEIKivPmTa9JRmZOVZL8cwW6r0BOy5dMNkfbARbs3AdsUBJ7yRy7xGdhZdNDZagLAHQ2DjqO/W2+r/8lizS/elTtffCWdBxIyduWyhJ8+gB068kPi3NxdKNy5ZagnIpf+67KsReMyO3VHJu4MSi5NFm4SyjweGbm+KMlDw+Jay+Ogi4qc/tEF+f1Pf4a+AptiLxZeKDt313nYhvLs3RIILj11ZXA26f6hoxLxQ57pmAbdQJ4Li5Lj2bcgsEo0UV8H/axroev2AHUnccxmM3KyMyO94ahaCG9lR8Q44XBE+voHsah0Y7E6JR+OF7CA7cDBED6MPxYOBaqWSRey7l5DtFR17DrpplWxbTAE6aAWbbkga2AzrzfqRpg2iGr3qLb9xmg1O18bUjXherF1/jopo+gqcQLxgEX7fH9FDh3YLx4sTFJZONBYykgO9+VcQZbzeYgnrHZnOuKFZuV+jOEQOGwhuNIMhRJwKRoFdygM+XVQ4bN2AaPz3s13Q1AbtC7lRgEXVuPYUpGgbSXozlmNbr9QRJlEDxc7V2fQJWUsAU8PR+Vom0P+/eMcWCLQSMTq/V9+Oys+/H4y5VfxFVsW8tLuiFum0JmPdPvkq9G0/OulnPzVSwkZQIfmbpc7P52vvuvRsoHY2mVSc4RdqVVEOOQZk31R2PdFfBLv7JBOsGioPEA2DcscCPjl1HAv2MNt64N7K0hBHCfkxhdvLsv124vyylBRnhrugy0slLtcHpQZpdWI2yK8+0YDrAoG+GsXTsozh+jY3wG5DSbJaEW+TLtkX19Y2iFTe+75lEx8dFeu3lmS717olWcHCnLp367LWjgoZ84MyOTvc1JIhNRKHQyDHQsr2Olxt7cBqdUGrMu2Hk86Xt17J1jYE1f/IJ2nnpdDpw5K5a1fyeTkvLR1wGcqiMfEyBXxJoelND0qpXCfHH/pZem4/Fu59fkVKeYy4i13y5orIsGudlnDDircv0/Kmdvyuzd/IvPwjcnzgMuraDlwMr585w1ZSWMR9vQ3ZPazDxVHQOkW4LjB0UsfSsSTx0ELKCjyXYHyEl1wKlvGTcpe7cR1Vb+nj9SlpzlYEboAh/wT2GFF0F+Dqt/Wg9ns2SKqWOClBsQHYtIFk5sr45Py+WJIJlei2JVDt0EPGptC6iLUw2RzqG917cK3VlIurRED3II17Pac0M1YA3FVu+G6NLrrqXECuLWL9Pp89bMCUQdHzw616XUUlqUCJa3TXUtyYjCOftKpXALSHztZtZQ500NVGTtq2qNTxko4xBm5W2Sl0++3DwqH3Ilq9rouz167G4LaoMXdmJQHIhW5tgClGadtj9Ug3pZeoedyNc9TYkqYiC680AWYcBCN2eXND2axGi5KrOySWdjK/fgVsEDxbRVxSShn00X5amlNXj/TJfuuLcpHt3PyF2DN/V0qolaG01NUIgALGQXZbIDfMxmx0Ho0MR3szo4D3rGBmASwsicLjLImDgwdqJ2bgOazUljQL7d4pxboweI4zjucl+NDfdCgTsrMDGwkNy3wFgE3igaYtG577xdfyEgCR0CFfJJqc8pCV0pe7SnKz/9zDIo0c/LP//A+JjG3nP/zQfn1Lz+TDz1QEjs+KMHpSRCLNRyo7pb3/ue2nH6yA04CuGhplNmjv+NCiL6ZraAzsRFDEQND7YrIeqH+k11vPW5M54CyU/Twt6TNG4Cs0yOHz/9Q7YTdmPQcjj658e7bEnv6OZGQV544/xqOKAxK6syrEvzykvxxISuOYgbtU5KnXv2BZGYWJBhLSPvZ12VpflGGYWblcKIvw0Jm6OwPJJdZEm8ERxxGw9LRk5RCrii+9k7x4YCGA6FB8WOnkgfr0BUIY7J1gqCyrLzqG39jHZR4hZVrWPfa9PwNuIWsHAlOyFksosi+ZR9+0J0R43NX5YEdK03nOtqnZP/UjIzMZmUkE5DJMuoCl6QkhER9fQ1YXCtoXpQVg/9ZSv2WjAYIWSTizMtAKA02qltuFuOQVa6PNysF87BgYJTbsDfmqrFmf7Rz4tN63nyyZogaeHZCVS4Q9OPhBTl7EAuJBGTncJDBoAkj5wLik6F+/BNnGs/6riLu4X+GoDZofE4+x3o88vHdjCytxrjA1n28OpBUn0S/rc57NpyNXd56yXc3xrPyt2/mq0o4BWx9MpShQjNyejYvf//LSemBIk0arGbOsVkcOQP3ufJPb01KHLaoC8swoi9l5epNTGIoD1nSDDBjtVb96kkPJfvBvul5qb6s3AHHvDC4HuiWZCqpzIEaDQy+e9jzCTkIj/bDY01PWGn5kThzQtqJUCquybdee0KOYCFExjnNRgLwPfwcdt4+yKqnbk3JT8fS8vKrRySZhLY0WJCD8NqSg7ZtfwoTZjYOX8VYZceHpfNQASxLyrt3prCEWkZ7VqDpXO1c9kSncKOz1e/0cz3i9Hf7PXeQ3Dk4i2UpAx80iWKnpakIQ++z34TcvgyNbZrP4MCi5ZyaFIPYiR4EvrAZkXZoBtO0JxSLom/lpASerh8nutCkolSAQJQBcP1t0J6FjWE2XcD5CS7ECSI+WIPwtesN87QinP7Sjp0x+lkpd59FVF0dNg4y5qVytNAEWb9il9ppViCuOB6akpcOhaV/YFD1sa2wem2I99y4y+rowEIKxLUNMsAeaAEfnZuXsYUpGV2CTLgQlLmyD3bhkCdSgwF4sIrH/+sV0QSUdXfBWS5jBx1liXtxhGOoKAM4XjiOfkm3nO/dnZerWZikQQFIV5UF0zD0eNE7zPVc7im+/WJjDP2k4VmwkRPMho7BPvR7w270/xTq3Nh7kZ4TahfZm+W8198bgtqgB9DOtBeHQL/Ytyi/Aquy4OLZqBw47Jq6y+P3hslWd1v93QaMAcUkqzgFZq6Wf4h3JNR6kKRzkNvm1qGTxcSBlMH7RRz0op4BchTOERj0IFOsKJW1zl99VXHUAOfruiJZH7FLBhvnSHIF9q5ws4g664FjJ96WG2GGwT5ieFiivNWCENU+7Er7MFEx8Nm6YypBW8WTHXL++245cKANB1KDdYkdU1eyTeGS7P0AnAYw0Rp2IT3JsNr9WxC29z+J9FDMJ98fHIOMqqbRa5twsyx1WzaIyz7x+dVbSqHm6OEBa3pHPE6kbAdyM1bBMWCfcekdkQ2vBL2B0hCILOJ63DdwYa+PeIzL9MyOUWmLzR9k3a7ApvXX716WPztzDLs6aIQikuqP/G4jnzeAUPlX+xeBMRAgg362nhr+Z9QsrLY+We6F83uUDWkqkEGejE4rYpoiMQU7/1GIqc6YMCju4O6MMOOJbulLp+VoelEWMsuSzqZlDopsc0UovUF8AZU+ya9ip1yBXS7KRTGR31WBExdcIKJRb0XigRUchO6EPXpA2iC3jkKkQjvZIuyRg4E7Erg5K5/CnKwEG1DLKlyXhrhc/61+EaEM93ywXuv/1empJj1/kuPihxnUibZFObvfI/tgH9rWTt+6aFsTHgkDhqA2QB8HVCTarjQFV1fG5INJKGaU2iEjopKC7p24Y8VOe07ODPrt+q8awPpjzSs1IWx4jx0Vv3PCQqBNmB4v6g0eGN0eSohg/aLNl8qfd1zK7q9aGkJC2JCP9YrKUb3uRXmmPyj+B5Q5WRC29p+T6E4T0tqScCLH5qpBABK8Pjn8hB+yoHUmmlKSsWNrImC1TQOkNYD6wK8AljiJtUfl1OFB5bXqgWFskoDzbA6rLzfY9aefPGj3H91jrPqwjlXCVgOH7+lKkIE7kXXCVJuevzVe6E6uLFcu35Snj+6Dvae1aLJ6qI6jwG3LP46rSbCkP7nigPgE424VfmHbZuUc2LxqZ7pNxLS2sIqwgqPiJ2GFo4gSxB55KOfk4SAiD5ktiWGxWAILHNwAuEMkd4CBWCJx8oHb4fcFocTlU2MsgF0v5bvk0tD3MOGvrsITGxYvPu9tSYzOyEezYZkuA5f4Vp1LNDoBWLUA2ur+gbEQdDybALN4DsxZCU9WvgmZ6amhqGKRd0Bu+jjHqFW43fnfENRN2pWr0wTkQs9guZkIwy/o9F0Zh7ZqGiYYVB3PlFxScgXBzrEIoN2Fq9IODVa/rx8C+r2Op7/Tnqs2WGSUA6lxCqbjwKvQA84a9Dgd1Bq0oNWm0PAZmwbtXc4F+c6+VenFsVceDPg9ETDBUBP16w6cSOkajxNslYhvQ6HoZCQxMoPdpVsGBoeq8+k2gG4Igmzk9s6EmpQ7O8Gy3NGAtnPPoGcvyGopL8/F5uTs4QiI6RCIXbRmAbD9heAChKxgXmQFV8AS5hjixUUIL0tZZ33sktXOhQkJlb7Y7oRVu6Dht85YDGs9L7w+TUj/2LR8NgXRTiYiC6sBiH9qZLaaQG4yF3BsW4ECD/2bdBVsZxDSmDsnR8NQPko6ZbC3B/NbrzJrMazc7eszhqBugkt2erJ9emA6wgOMexJzkgbbJwsVcmq7jSw45eIiOjx2ity1asUV3Y01u6W6obU/WBNoI/KoiaAVUU/7VXg2kawSWHvVyeIzLl3Cwf8RtGq5A7EqpVa4+EgtSI5F5u2sFODBZF5e7IfWMGwtI1h5c6Cb8HgxwP61/RMZJk66yYRJFu87HyyPW5pg7Gx+lInD7AbaI08RyAAACAZJREFUxWdieTkHYqrYvDtMTOvrpNutvu0aLYxqCWc9nNpnwuIOmDtZmp10d07J0elFGYEi2I3lkMyUA8rZAokkr/XxXQtlfd6wvLiR44WTd5xFiXsKciCck+FOkVSiHSzsHtiIdqid8lbLWJuT+b05Bh7HqNs89yb/ws7GnWoMK0iugulUnmrklD12wx/t6rU5uThHezWal5BiYY1oEzMSsNpQJax8iV1oBdq1QtORKuW1YmuCWU1u/9BwFfVE1IoNkNlRJtfpzEqvNyNjpTacrOGTIpQmqDBBSupxrCqZSRcMtw915OVYb0hSfSmc+hBXrCcrZ/PfYKCJMYBxwIXfuSGRJ7rJqkwpP9TNshh8VMLE9FzAe709apEb61qQgfk5ObmQlkl4r5rIOmSm6MMF5/5rML1bc1syW0VkgRtMDF7IbD2Q6HpdYOvCkUncW5RkuCI9US/OH+2EfXEMslLLHK5+QdDELd9SRTMEdQvNxUFLwsqLgewdemX5toyKb2RWPphtk8waT6zA6lERQPyrUkA7gyqFJQnESpPcIRBVpbFIKqkJq6aYiKMCbvzF5BZo9d9+YAx8hfebE4mCPJXwSKaQkVmcTpOG/V8J22ZKYoIeKN/gUJNYNCDxWC/sTBNqgUAWlgkGA62AAfb6WMQvLx7rUco8dB6wG4kC60TfwySulG0mslkZWIZjf1xLy1k4yFiWHGTIy9DgLsIMjy41OTG4Yc4Ex2kSxhQVhGZ70O+TSDgG0ULEcrbQwByuFdq91cpoCOpDtBgJLDVXU/Cu8gIGQPz2tHwC59yj+Sh2h37QOOwMQVlJCHkxWE+4c2YANQ1B+8+zVpR0pR20l7Es+cs6M9ginGQl8atOr9i46hn/8IVam0fDGTkz3C49UJqg5mUOg7CM03LooIKwebqMHw7wKbejZiEJ6de9smeVae9bv+5grXZjsOqre8NurOHO1on9mPJLKvSQ6Hzd/Xdna2sphgVBBP2KsIILBjETHSyUcGlHCxWMfU4onFN4ehA1t2lHStYxF//8zbG+F/C10+2xVfiGoG4VU3XxOKDpTcQzuA/KJWFJdkzIKM4LvZVxyp28JfOg0fYK2DMMHtiiBZwr8MBUkj5/XoYiJagbVOQ3Mw6ZKEOpQlEWkE17ztUyGU4kNmlVcOjwQQW8JzHd54cHogNO6U0mFTuH3yox6yQNRYwRj2XVl0W8LRBf13/u5NOLJbn0yfSunxhrcZyH+71CgXa4hrDW4mWrv0kYeO2loMctCSN3rRzTlgIUCak9F9gIYb/ixTSmj309vcQQ1EfAOzsuO3myt1fZqyUSCzKMw4wzOHsxnYMvTLBl6B2JwQN/vBE4F2iDF55oJAw5CfyNwo9rODwj/z1akpv5NtvFmd6LWoOlSkAVFAsWFaAgSZFj4TSOf3PKwcF+xdZheRh4p6JIswYeEn36xDEZvT2BIm6cFJq1zNtRLic0sJ9/9gCIgtVO2wHTwNhbGCCh3GuLilZq4eaddVsEi+zgXD3y3EW66OqKJ5StWhFOw6m8ZJ0naRM5eGAiC4dsK7JkqHZP04mI7658Nj4tV9IhmSoF4VMFe1ee6lC3kcFx0eLD16RvWZ6CctGTKdjg4TQYHqLMMrRKIOvuhTMn5dRTw6jn3iGoJKQ80L2ZFzut0odMOQ0GmhEDhqBuU6towkrCRoJBdkztxe+1rBgdnz5y6Vi6E75DD8/My+35tEzkvDJdcONYNrC3kI67uAAcjnf7y9IXXpFUh1d64j3wi9ujlItabYKmUTsXAdQ63GtB94O9Vm9TX4OBvYABQ1B3oJU5afLaSiBxiYG4hOCQm6e8DMDWdQks4wK9sMBMh34IPPD36/O4wV6OKFYxvThRE5C7XM3m3UpezRSnVcvdTDg0ZTEYMBhoLgzsGYJq7Qy2RuQedxORuHBXy4s2r/SrSnYxbV65y+V3uifzwpUZCbAlQ2nOujxu3Jn8ajGw9YVcbSrz22DAYGB7MLBnCOpytiAzs5mWkDVaYkWyey2zEkoZV6DctIoTaPLYuZpgMNAQA+g46UxWOnn26WMMHnBPTDAY2M0Y8OA0pa2EPTESonBowHMc/+PN/1N+TreCmKaIU7sJ3Tu6O02B+lYsBBW8sjiO7djhlOJsbFXs8LB1JfwynAz8/BfvQ5b/eIn4w5bZpDMYeFAMcBqemJyHPT85QPdP7QBLcVdP1ayeOiEin8UkY2nb3h8l5qvBQGtigH2dpxT5fQH4nw7tuHy9BOchN27ekbl5nNELUYQJBgO7EQMcV2WI4ZLJmAz0J+/L5dz1BJUNTPMUyiNpEG2CwcBuxgB3jety9p2tKb33UHmO953eDe9sTQx0g4E/gQFsxtyw4NCeujaLvScI6maVN+8NBgwGHh4D1o74Xo89Dw/RpDQYaF4MUDn0Ty0cDUFt3vYzJTMYMBgwGDAYaCEMGB9oLdRYpqgGAwYDBgMGA82LAUNQm7dtTMkMBgwGDAYMBloIA4agtlBjmaIaDBgMGAwYDDQvBgxBbd62MSUzGDAYMBgwGGghDBiC2kKNZYpqMGAwYDBgMNC8GDAEtXnbxpTMYMBgwGDAYKCFMGAIags1limqwYDBgMGAwUDzYsAQ1OZtG1MygwGDAYMBg4EWwoAhqC3UWKaoBgMGAwYDBgPNiwFDUJu3bUzJDAYMBgwGDAZaCAOGoLZQY5miGgwYDBgMGAw0LwYMQW3etjElMxgwGDAYMBhoIQz8PyqC29RIc6s4AAAAAElFTkSuQmCCAA==" /></span><span lang="EN"></span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">In this diagram you can see the additions to
the architecture:</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormalCxSpMiddle" style="margin-left: .5in; mso-add-space: auto; mso-list: l1 level1 lfo1; text-indent: -.25in;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN"><span style="mso-list: Ignore;">1.<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Data arrives at a high rate and is
ingested.<span style="mso-spacerun: yes;"> </span>It is immediately exported to
the Batch Layer, the Data Lake.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormalCxSpMiddle" style="margin-left: .5in; mso-add-space: auto; mso-list: l1 level1 lfo1; text-indent: -.25in;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN"><span style="mso-list: Ignore;">2.<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Historical intelligence can be
mined from the Data Lake and the aggregate “intelligence” can be delivered to
the Speed Layer for per-event real-time decisioning (for instance, to determine
which ad to display for a segmented/categorized web browser/user).</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormalCxSpMiddle" style="margin-left: .5in; mso-add-space: auto; mso-list: l1 level1 lfo1; text-indent: -.25in;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN"><span style="mso-list: Ignore;">3.<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Fast Data is either passively
ingested, or a response can be computed by the new decisioning layer, using
both real-time data as well as historical “mined” intelligence.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">For a working code example of the simplified
speed layer, reference the </span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">VoltDB “fast data” application posted here: <a href="http://voltdb.github.io/app-fastdata"><span style="color: #1155cc;">http://voltdb.github.io/app-fastdata</span></a>.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN">Conclusion</span></b></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">The Lambda Architecture is a powerful Big Data
analytics framework that serves queries from both fast and historical
data.<span style="mso-spacerun: yes;"> </span>However, the architecture emerged
from a need to execute OLAP-type processing faster, <span style="background: white; color: #333333;">without considering a new class of
applications that require per-event decisioning: applications like real time
application of user segments/scoring, fraud detection, denial of service
attacks, policy and billing, etc. In its current form, </span>Lambda is
limited: immutable data flows in one direction, into the system, for analytics
harvesting.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">Adding VoltDB, a linearly scalable in-memory
relational database, into the Lambda Architecture greatly simplifies the speed
layer by reducing the number of components needed. </span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">Lambda’s shortcoming is the inability to build
responsive, event-oriented applications. </span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">In addition to simplifying the architecture,
VoltDB provides future-proof functionality to Lambda, specifically, the ability
to execute transactions and per-event decisions on Fast Data as it arrives.
Rather than a one-way streaming system feeding events into the speed layer,
adding an ingestion engine like VoltDB provides developers with the ability to
place applications in front of the event stream to capture value the moment the
event arrives, rather than capturing value at some point after the event
arrived on an aggregate-basis.<br style="mso-special-character: line-break;" />
<br style="mso-special-character: line-break;" />
</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN">VoltDB improves the Lambda architecture
by:<span style="mso-spacerun: yes;"> </span></span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormalCxSpMiddle" style="margin-left: .5in; mso-add-space: auto; mso-list: l0 level1 lfo2; text-indent: -.25in;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN"><span style="mso-list: Ignore;">●<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Reducing the number of moving
pieces, the products and components, needed.<span style="mso-spacerun: yes;">
</span>Specifically, major components of the speed layer can be replaced by a
single component, VoltDB.<span style="mso-spacerun: yes;"> </span>Further,
VoltDB can be used as a data store for the serving layer.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormalCxSpMiddle" style="margin-left: .5in; mso-add-space: auto; mso-list: l0 level1 lfo2; text-indent: -.25in;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN"><span style="mso-list: Ignore;">●<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Enables the ability for the
application to make per-event decisioning and transactional behavior, without
re-implementing the architecture once deployed.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormalCxSpMiddle" style="margin-left: .5in; mso-add-space: auto; mso-list: l0 level1 lfo2; text-indent: -.25in;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN"><span style="mso-list: Ignore;">●<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Providing the traditional
relational database interaction model, with ad hoc SQL capabilities, on Fast
Data.<span style="mso-spacerun: yes;"> </span>Applications can use standard SQL
providing agility to their query needs without requiring complex programming
logic.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormalCxSpMiddle" style="margin-left: .5in; mso-add-space: auto; mso-list: l0 level1 lfo2; text-indent: -.25in;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span lang="EN"><span style="mso-list: Ignore;">●<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Providing access to standard
analytics tooling, such as Tableau, MicroStrategy, and Actuate BIRT, on top of
Fast Data.</span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<div class="MsoNormal">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-6055718381238064152017-08-01T06:53:00.000-07:002017-08-01T06:53:26.662-07:003 Fast Data Application Patterns
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:-536870145 1107305727 0 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Arial",sans-serif;
mso-fareast-font-family:Arial;
color:black;
mso-ansi-language:EN;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:11.0pt;
mso-ansi-font-size:11.0pt;
mso-bidi-font-size:11.0pt;
font-family:"Arial",sans-serif;
mso-ascii-font-family:Arial;
mso-fareast-font-family:Arial;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;
color:black;
mso-ansi-language:EN;}
.MsoPapDefault
{mso-style-type:export-only;
line-height:115%;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:0in;
mso-footer-margin:.5in;
mso-page-numbers:1;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:197280318;
mso-list-template-ids:472514760;}
@list l0:level1
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.25in;
text-decoration:none;
text-underline:none;}
@list l0:level2
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.75in;
text-decoration:none;
text-underline:none;}
@list l0:level3
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:1.25in;
text-decoration:none;
text-underline:none;}
@list l0:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.75in;
text-decoration:none;
text-underline:none;}
@list l0:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.25in;
text-decoration:none;
text-underline:none;}
@list l0:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:2.75in;
text-decoration:none;
text-underline:none;}
@list l0:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.25in;
text-decoration:none;
text-underline:none;}
@list l0:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.75in;
text-decoration:none;
text-underline:none;}
@list l0:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:4.25in;
text-decoration:none;
text-underline:none;}
@list l1
{mso-list-id:405346598;
mso-list-template-ids:-227358982;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.25in;
text-decoration:none;
text-underline:none;}
@list l1:level2
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.75in;
text-decoration:none;
text-underline:none;}
@list l1:level3
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.25in;
text-decoration:none;
text-underline:none;}
@list l1:level4
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.75in;
text-decoration:none;
text-underline:none;}
@list l1:level5
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.25in;
text-decoration:none;
text-underline:none;}
@list l1:level6
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.75in;
text-decoration:none;
text-underline:none;}
@list l1:level7
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.25in;
text-decoration:none;
text-underline:none;}
@list l1:level8
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.75in;
text-decoration:none;
text-underline:none;}
@list l1:level9
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:4.25in;
text-decoration:none;
text-underline:none;}
@list l2
{mso-list-id:1093628229;
mso-list-template-ids:1962541456;}
@list l2:level1
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.25in;
text-decoration:none;
text-underline:none;}
@list l2:level2
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.75in;
text-decoration:none;
text-underline:none;}
@list l2:level3
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.25in;
text-decoration:none;
text-underline:none;}
@list l2:level4
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.75in;
text-decoration:none;
text-underline:none;}
@list l2:level5
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.25in;
text-decoration:none;
text-underline:none;}
@list l2:level6
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.75in;
text-decoration:none;
text-underline:none;}
@list l2:level7
{mso-level-number-format:bullet;
mso-level-text:●;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.25in;
text-decoration:none;
text-underline:none;}
@list l2:level8
{mso-level-number-format:bullet;
mso-level-text:○;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.75in;
text-decoration:none;
text-underline:none;}
@list l2:level9
{mso-level-number-format:bullet;
mso-level-text:■;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:4.25in;
text-decoration:none;
text-underline:none;}
@list l3
{mso-list-id:1876305686;
mso-list-template-ids:2136767120;}
@list l3:level1
{mso-level-number-format:bullet;
mso-level-text:-;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.25in;
text-decoration:none;
text-underline:none;}
@list l3:level2
{mso-level-number-format:bullet;
mso-level-text:-;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:.75in;
text-decoration:none;
text-underline:none;}
@list l3:level3
{mso-level-number-format:bullet;
mso-level-text:-;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.25in;
text-decoration:none;
text-underline:none;}
@list l3:level4
{mso-level-number-format:bullet;
mso-level-text:-;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:1.75in;
text-decoration:none;
text-underline:none;}
@list l3:level5
{mso-level-number-format:bullet;
mso-level-text:-;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.25in;
text-decoration:none;
text-underline:none;}
@list l3:level6
{mso-level-number-format:bullet;
mso-level-text:-;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:2.75in;
text-decoration:none;
text-underline:none;}
@list l3:level7
{mso-level-number-format:bullet;
mso-level-text:-;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.25in;
text-decoration:none;
text-underline:none;}
@list l3:level8
{mso-level-number-format:bullet;
mso-level-text:-;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:3.75in;
text-decoration:none;
text-underline:none;}
@list l3:level9
{mso-level-number-format:bullet;
mso-level-text:-;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:4.25in;
text-decoration:none;
text-underline:none;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
-->
</style>
<br />
<div class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN"> </span></b></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: xx-small;">This post originally appeared on VoltDB.com in January, 2015. It has been lightly updated in this post. </span></span></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><h2 class="MsoNormal">
<span style="font-family: Arial,Helvetica,sans-serif;"><b style="mso-bidi-font-weight: normal;"><span lang="EN">Three
Fast Data Application Patterns</span></b></span></h2>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">The focus of many developers and architects in
the past few years has been on Big Data, specifically mining historical
intelligence from the Data Lake (usually a Hadoop stack containing terabytes to
petabytes of data). Now, product architects are asking how they can use this
business intelligence for competitive advantage. As a result, application
developers have come to see the value of using and acting in real-time on
streams of fast data; using OLAP reporting wisdom, they can realize the
benefits of both fast data and Big Data. As a result, a new set of application
patterns have emerged. The applications are designed to capture value from
fast-moving streaming data, before it reaches Hadoop.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">At VoltDB we call this new breed of
applications “fast data” applications. The goal of these fast data applications
is to do more than just push data into Hadoop <i>asap</i>, but also to capture real-time value from the data the moment
the data arrives.<span> </span></span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Because traditional databases historically
haven’t been fast enough, developers have been forced to go to great effort to
build fast data applications - they build complex multi-tier systems often
involving a handful of tools typically utilizing a dozen or more servers.<span> </span>However, a new class of database technology,
especially NewSQL offerings, has changed this equation.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">If you have a relational database that is fast
enough, highly available, and able to scale horizontally, the ability to build
fast data applications becomes less esoteric and much more manageable. Three
new real-time application patterns have emerged as the necessary dataflows to
implement real-time applications. These patterns, enabled by new, fast database
technology, are:</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormalCxSpMiddle" style="margin-left: 0.5in; text-indent: -0.25in;">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><span>1.<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Real-time Analytics</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormalCxSpMiddle" style="margin-left: 0.5in; text-indent: -0.25in;">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><span>2.<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Real-time Decision Engine</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormalCxSpMiddle" style="margin-left: 0.5in; text-indent: -0.25in;">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><span>3.<span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">
</span></span></span><span lang="EN">Fast Data Pipeline</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Let’s take a look at the characteristics of
each of these fast data application patterns and how a NewSQL database like
VoltDB can improve and simplify building applications.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><b><span lang="EN">Real-time
Analytics</span></b></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">This application pattern processes streaming
data from one or many sources and performs real-time analytic computations on
that fast data. Today this application pattern is often combined with Big Data
analytics, producing analytics on both fast data and big data.</span></span></span></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><img alt="" src="data:image/png;base64,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" /> </span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span></span><span lang="EN"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">In this pattern, the value captured from the
fast data stream is primarily real-time analytics. The streaming engine tracks
counts and metrics derived from each message. Applications tap these stored
results and display dashboard state and possibly offer real-time alerts.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Important features in this application pattern
include: </span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><ul>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Pre-built connectors are required
to easily feed the streams of data into the database.</span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><span></span></span><span lang="EN">The database needs to compute
real-time analytics by pre-computing materialized views on a per-message basis.
</span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><span><span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;"></span></span></span><span lang="EN">Standard reporting tools such as
Tableau or MicroStrategy can use SQL to query real-time state and compute ad
hoc analytics.</span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><span><span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;"></span></span></span><span lang="EN">The database needs the ability to
perform analytics and aggregations over time windows of data, such as by the
second, minute, hour, day, etc.</span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><span><span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-style: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;"></span></span></span><span lang="EN">The database needs the ability to
discard, or age-out, data after it is processed.<span> </span>VoltDB accomplishes this with “capped
tables,” the ability to define a table constraint to limit the number of rows a
table has, and when that constraint is violated, to automatically execute
delete statements to remove older rows.</span></span></span></li>
</ul>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><b><span lang="EN">Real-time
Decision Engine</span></b></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">This application pattern processes inbound
requests from many clients, perhaps tens of thousands simultaneously, and
returns a low latency response or decision to the client. This is a classic
OLTP application pattern but running at scale against high velocity incoming
data.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span><img alt="" src="data:image/png;base64,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" /></span><span lang="EN"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Scaling to support per-event high velocity
transactions enables applications that evaluate campaign, policy, authorization
and other business logic, to respond in real-time, in milliseconds, to
applications. In this pattern, the business value is providing “smart,” or
calculated, responses to high velocity requests. Applications that make use of
this model today include digital ad-tech campaign balance processing as well as
ad choice (based on precomputed user segmentation or other mined heuristics),
smart grid electrical grids, and telecom billing and policy decisioning. In all
cases, the database is processing incoming requests at exceptionally high
rates. Each incoming request runs a transaction to calculate a decision and
return a response to the calling application.<span>
</span>For example, an incoming telecom request (a new Call Data Record), may
need to decide, “Does this user have enough balance to process this call?” A
digital ad platform may ask, “Which of my ads should I serve to this mobile
device, based on campaign available balance?”</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Important features in this application pattern
include: </span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><ul>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><i><span lang="EN"><span><span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;"></span></span></span></i><span lang="EN"><i>ACID Transactions</i>. In this
pattern, the decision engine (the database) is updating state in a consistent
and durable manner. The state is often a balance of some kind (usually
monetary). Additionally, consistency is important. These responses (decisions)
are based on data that must be correct, thus consistent.<span> </span></span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><i><span lang="EN"><span><span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;"></span></span></span></i><span lang="EN"><i>Low predictable latency responses</i>. These
applications need a response in real-time. Often there is a budget for database
processing that ranges in the single-digit millisecond range, 99.999% of the time.</span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><i>Durable data</i>. In this pattern the
database is often a system of record, at least for a time window. Should the
system go down, data would need to be durable and recoverable.</span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><i>Ability to use standard tooling,
i.e. SQL, to query and compute real-time state</i>.<span>
</span>Real-time dashboards capturing the state of the system (balances,
transactions/second) as well the ability to ad hoc query state are important to
this application pattern.</span></span></span></li>
</ul>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">For a real-time decisioning (high velocity
transactions) code example demonstrating an ‘American Idol’-like voting system,
with per-vote validation, see<span style="background: white none repeat scroll 0% 0%;">
<a href="https://github.com/VoltDB/voltdb/tree/master/examples/voter">https://github.com/VoltDB/voltdb/tree/master/examples/voter</a></span><a href="http://./">.</a></span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><b><span lang="EN">Fast
Data Data Pipeline</span></b></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">This application pattern processes streaming
data from one or many sources and performs real-time ETL (Extract, Transform,
Load) on the data, delivering the result to a historical archive. In a
streaming data pipeline, incoming data may be sessionized, enriched, validated,
de-duped, aggregated, counted, discarded, cleansed, etc. by the database before
being delivered to the Data Lake.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAakAAABRCAYAAABomlmbAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAm1pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzI8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K0ULlwgAANKFJREFUeAHtfQmcHVWV96n3qt7a+5Je0llIAkIChLAk7AaDoqPCKBN03MaZcdCZwflGQGcUnQRn0RkVcVBnvvHn/jnDouCGDiiigGELO0kgkAWy9JLeu99aVe99//+tV92vmyQ0nV5ev763u15V3brrqVvnf8+9555r5PP5hSKyCId200OBPsMwnp+epHWqmgKaApoC5U0BE9X7cxzXl3c1Z7V2d6IjcBmAyp3VUujMNQU0BTQF5iAFAihzfg6Wey4VOTeXCqvLqimgKaApUEoUIEhppymgKaApoCmgKVCSFNAgVZKvRRdKU0BTQFNAU4AU0CCl24GmgKaApoCmQMlSQINUyb4aXTBNAU0BTQFNAQ1Sug1oCmgKaApoCpQsBTRIleyr0QXTFNAU0BTQFOA6Ke1KmAJYYxVD8Z7EES3hYr6Won0Ra8a+8loi6LCaApoC85cCGqRK/90bKGIbjnIBqarSJ7kuoaaApkCpUEAP95XKmzh6OcppQbBePH70d62fagpoChRRQINUETH0paaApoCmgKZAaVFAg1RpvQ9dGk0BTQFNAU2BIgqU5ZwUx5PyuZzkcnnJ5TFSloePYYj6MwISADQH+KOdpoCmgKaApkBJU6CsQCqTzUomnZFkhues2LYjtmuL6+aAUYYEAVBWyJJwyJRIOCyxaETC4ZAEg8GSfkm6cJoCmgKaAvOVAnMepKCiLalUWgaHhmU4kZAErjNZD5ho4J1SFYQqMXCRh1SVxwVlqACAKRqJSEU8LrXVlVJZEZcQAEw7TQFNAU0BTYHSocCcBqkMJKaevgHpG+hXQJXjsJ5yBobzqLltAJjyYqhrAFae914Ix3FlYHBI+geGpOvQIamurpbmxnqpAWBpycqjkf7VFNAUOCwFyFzoCufN6sb72eY/K/J7tctVPuNCwM1+YN/PP/v+8+48J0GKwDOUSEpnZzfOCTX3xOG8AEGJfxN4rSq8Ai8R23Gk+1AvpLEhaWlaIC0LGtQw4LxrDbrCmgLlTwFj/Qc3h83QynCsIRxxMmYkWpMLOf2ulQ+HTckHK62YW52zrKpQJFJt5AOVQUMq8+F8tWlaVZjsrgyYwVgub0TBPqLgI6F8PmgFAjkTIzZm3rgMPNUNBnLoJiOiyz4ye8cFh4mHfDAAFoUHuQDHeIIuTm4+II6RCzhG8DLbzecykg+kA/lcKpd3kwg4lHdzA24mN+BIdth0ZMjO5Qbytj3o2DJgu0NDwWTADlTmHGSXtSSUtvu70taBeOa2267IIOs5vYRlzoFUDvNLPX390t0D6SmdVq8+AIDyBvb8pvDazgbmqvAvWcxp7dt/UJLJlLS1NklVZcVrS0iH1hTQFCgFChgbP35nUzoSrY/H3EbXMhoCjhULGk5V3oo2WtFAkxEJN5mW2WqY+UYjEKyDUFQRNK0goIN7Q7gBy8gFg4AhIxgIhnFYITEsMAnAjQGlK/ILdnQJRFTKolP+vOS956X8VRzyKPaeizvQhXt1UgpeCI6bPBS+vAO3xDHeA9QcTGPk7JwrwCLXgUpYNge4w1Q70nYc4FM+N5x38r3gkT35XEuH+7rsgfeef3+Xk813G1m7PxAJJfKO0e8Mux39wf6eg9sy3dtuuyLrFbJ0f+cUSBGgOnt6pKurB8oQ6DP4L37K6IueD9pAe+chKF+k5filS6S6SgPVlJFXJ6QpMKUUyBvrN349XrVq6YnRqqpTLDN4et4wFgMt4pGKUGVtPNQcjIQaQhWRmIW5ZwILQSgAUSZgBQsAgwIRUziqUgAeMn74etpUBA2WmUhS7MbgTdEzL3BxSGbqAdRYXw/ImDcPNVPOALgZ+S2+4LV6pkCJYZSjF8sIdghgq0T1KpHfEmKem3UAbpDdmGbOkGwqJU4ilbFTzqF4orqrpTnbt+b1W5KQ2tpztvNMNpl43Onevv3HNw4MYtixZKSvOQNSnG/qhQR1qKePHQs156R6JoV3NWUnNAR2oAYHhmXPywdk2dI2qYJShXaaApoCs0uB9es3m7EzzloYq7JWhGurLrQqHr9IjPOOt2KmEa6MVYVqY9FQZUwME2gDTk1QUo5aUx6D9+4LQDKKOxRC4Am2rB4Vos3YaUym3s2I18gFSzPu2eEKqOoMyAPEBqDFXFxvKw/FsHxVGNHaAGI0tQYQw3THcErSg8O2M5Dpyw435z74Leegnbnk15ne5G8N237h0N6H9v/2O5u9YavD5TnNfnMGpAYHh6Wzux+SDtXJSd3ppQzz6O3vF3NfQJYvXSzRKN+tdpoCmgIzTYFVm28NrYrUX2JFom+INFZcasXCyyzw2khdpZhxy5OCPGkCRQNjIOfllc8j1Nm/UY/K96dQ19EqH6He5KFwBnArVIulOHURENJYQPI5Kbs53ZtYk+1PfcJNZrtDDW/+0btWbrgn6A78+r8/+bY+L+bM/c4JkOLcUxcUG2zMElJrb1okqMPRHK2861CfxGJROW5JW0EQP1xA7acpoCkwHRTY+Ln/XWFWVH+9dmn9hnhbYyAYCUowRB6A3DhXQ3DC0L92k6SAIp0aLkQCHh2DEVMq2moMY1Et5sDcBjeV+3Cqa+DDfc9bT73zxnv+5va/3XDfJHObVDRfIJ5U5JmIxGE+qpkTqKggMbPOwHfgSk9Pr6SgTKGdpoCmwAxS4JyN0Uhl7feaTlvyxtqVrQGrwsQ8ErDJwXpHzLXMWGd1BqtcElkp4IfFHizT4VSZCbpXrWiQlnNPWB0zIp9b//GvNc9kOUtekqKm3eBQAnLpTJJlNC8qZySTaTUXtgiLf731V6PP9RXHtIel4/6HJdM7gMXS0Nc9bpE0rzudE4dTSp6tIhb0aRdjvCGKTbbmbfeZrAPTJ52XiHRNKYFLLLGqwcEotNtOcHqHJdcIxQcoPHgiVIkVtJyLw68Mc3qcs8vy+xbzTCcdbIJvx0xVexZByhMxaV9PieyoPrVQlFonhvQoNXH+qR8LbjnMR//ZYEvM13FdzIf1Sl1NtVRWaiWK8Y0zGArJ8MEOeWLzVyXR2SPxtiZZ+4W/l+Xv+ANvvmB8hEne91jWqQ3x+PeWtLTE86bpTTxMMq05G43fxfBwOLl3750bc7lrbhMZnrN1OXrBjbq9+0MdpvTuGLbrVj32sl3bUh2INsRMpRBAbbwCTwAHmRXecPTiz8GnJCmlAfyrzgAlKjsnie6EO9Q+kNvlQuU9bPTInp0zWrkZBymCEtcj0c6esq0HNUkagfVEd2qlBMQ0TbWYlmsEhrFod7YAyn8T/BaSySQUKQYlFo9C+29qJQQ/n7l6DgCkTvrz94oJ+WbrdV+SoZc65MFrPqcYx/LL34L3NzX06rTthuPWrz/x+K99LYDewlwl17GVG40x9cADsvVd71o2MDjIXZvLFaTAE3IGl8FuX1BrPOc41vFdw07b/r5sJeb4G2piwXhV2MhbZj4QDgYNqpQrrT5/PZLXCVbM9tgoXn6x0YbI0/ijzrjkvF4evNjN5lzDcYzkUDbf159wB4bs/MFw0NhZVWmlIyHjrD37jJybnJoPeoKUnTGQciGNpGn8Fbb1UqkMAAoL0wBOBC02JIKUuiwUPIgGR3CiNQhFSTyfPcfFci7MLw1IY0MdDNPOvKaf+9xOyTz4GFccY0iNa/gUBowIl+PvucjBp5h6xkZJP9z4CyD851hCAYePmzFoOgr3vFbxeM/HcOpePfOuPb/CcwB3Du80trhF0t0Dkuzoloc/8xUVZ9mlb8Jk97HbRcTiDQuWAJx8ZWXImK8gxfeANT82Po4h0IPvoFwdOjdsiurzT0RDxpPReutJMIn6RFqaelPZqs7BQFUw4NZFgvnacDAfwWJciQSwENcKmFEraEAFm+CllK1IJNWQ8eP946w8ypN8INyIVFSQjkhLxWdtF2CENcFpcOVsJidpN+g4dq4nDR6XgWkL2w0MhqxcZzxq9S6qNlxlgDsvFt4GtfnD4ciMEm5GQIrgNID1YWkoPziY8FSzcfglESm1sxVSQYIE8BsOh9jU2gVFbNWu8HD2HMuXwPxYGot8ZxKkDoE6DYCNzJatMnj1P4sLOuYwe8wleopcIAkpynvIoyP+vHYLYTguRshhGM/PgyDvmn6899LzwmIhoIrDM9P16O/F98DLy7OQL18c6JMzwBRiFtYGBsWMRWRw1z554OrPixWPydK3XIRUjs2hu+L14MqZuUyERKg/KG6gq6S+HkRhUyh/x/eOGvdURqWnOhZirYO2Y4azTi4MW0LWsCPVg1mj0k4aTYabrckZOUscrPE18mYobEMzMGBGrFAQ1o+ClilmCJaLAGLkP5hL5ScAR65EbqxuPJoW/EcIXPRoxG+6Lsa/2eK2r9qB+vhUCzAKxkldgpCTzzsZCAIZx3AzdtZO51wnnTVhrCKYDhr2IOrbg9r3QwAdCFhim5YBCx2SqQqGHJOLrFDJggChePJM1nkcLacdpBIYJhuAEddMhiakUHdUnnQupvW4MqlbNhX+eyzxcCFm1k9JdZAUUgDcmXcAcxi+NVcsQouCKS/0bAgSdD5YkJ4+sPADI/CY8BsBGLY5hqdkhHY9Eo9ERlgfjOhPwpPuXphRkPJArQik+B7ZwVChES1oSgbvOg2L9DDPoia6a1ctk1hzg0pV/0wdBdBpyu/FkhakiLdQli6/N7HNWc7GNd6pxu55uxhxSZrhQLLQgeniJgcYoQHDtgJgsrSbZ7m5fNx2g1EIDbHhdK7GydkR9IAjbi5ouC7s7uUhLJhOyAzkMHIYwNohM2SawRAs8HFhP3mWiWmIoAnZjswb5iloGSkfwGgkwY2OvAqjk+pzKtwrf/XDb8x3RdUpukQy/OiUw6vFbd6gAqOBF53DtIdL4xHw4Dw9qiMYlQvYWTxx8jzlaRXJsW0TJxMzRy5Ax06hzMMYCB2CvaeEaVmp6ohkUKFcAPYGPWBmHVB2Hsha5Y+fIvr6pZ7N87SCFNW2+/uHJGtnQQOP8c1mZY8lb75DNpIs7GfNpGv0mkw+dOG5UnXcYqAM4YftyW9VPPPea+H+V+Ld0b/IsWEWPHx/78zfQjreSUU6fFgvPT8+71RsfLWp3j556vP/KamHnmZPThZefLac/blPSOMpJ3qR9O+UUcAMh8PXXnll66X//M+BRQ0Nxa9jyvKYzYS6u7uNb37zm433BAJH51Gq5uOqX2DALuRudtxsLFNNRlkb1bghJhRMHtELLuDmTACZGcL3jTO4vCtmNu9GMcgPY655E/M1ppEzAq6LAUjIGA5xC109fHQmrMB6skwe/D6Qh2AyClxIW+WIHxWGNyhqcWkJSC7TynHQXUEVRpuIgmKgU5jnoIlrGDmgJaaNAnkHtgIdZJIygKpmMOhYwWAWYGTj4Bmwy1xJs3F0G5MxA406fujFhRp9UhJX4yoydWUiM+c2GFSOoBQywh2nLouZTUkx+JyqD3s2M7mzr2p22EYkhKNUXRoA9dx3fijdDz6D8W5bFl5yvpx/w6el5oRlpVrkOVuuHIbCq0477fTLr7321gX19ZSmStaB/5EFw3CrYgKFcrJFq33dXHRePeF9XA3q6+vlTz7wJ+ZTv+lo4/dWEJTGhXoNt4oJH54TQ7KAhBGUTDFfh3U0MHsCGk5HyEdJbbBfTleUfkG2Gok0IiKpYGMTg/xUcLjwr0kq75ppe+n7wUaqgIuRaz4s3Cu/MQ/8mHP2PC0gxUZFM0Y2tEVI67IhGVoUGYQvYczZtz7FBbdhuPL579winQ88IrElLdKyarmcef3VGqCmmM7FyQUjkVgkHl8+8wvci0vx6tfktzYNQmOYnGNkPi8wAAqRlgVHTIAd2wjWJWLI7YhhpvTBeOY+/v41ZDYKPF4kf3Tj6EkgQ584msGMIdW0gBR3yuXcDWk+14f5xlCrcOMPrR3u2bz0w0e16JL10rbhAgB4HnNQC9QxL2kxQ5UmnT0NWY4/ed3uGcr6NWWDiRTZ8f0fyvPf+G9oeEYwf8khZ5Q5EpbTP3OVLLsUS5IP4/z68azd/KbAlHdTqGo+nEiphljC387k3jp4AXuASqljcimUZSzSw8WygmzfoGRhPT47nMAk8mFHccqy/rpSR6YAv5fFb3+TRBsWSP/2PTK8a78k9hyQ/qdfkGf+7ZvSu3P3kSPrJ5oCoMCUgxTVzDkPpYagy4nE6NFxCCJkWUrbp5yqdqx14fBG+wMPy2/ff63c/fYPyz3v+T+y/76HjjVZHb9MKFCLecmVV30Ai70jnKDCtD6NxJrS8/RzGCa+TXdoyuQ9T1c1jgmkKIors0boNfOaR4YWJNiLxnU5OdYmgF5hCOsrlCLILFTOpyjPU3FMVRWsaFRe92d/LMd/6I/UZnI9j26XR677onQ88sRUZaHTmeMUaL34fGm6aC2Mlhb0PKCsAAvbsvvWu6T94Se92vkNfI7XVRd/ainwmuakPFCCnj6G9LI0oUF1aC74giPj5kGtPo6Ql2V7w/qLXlidoGZfHL3CCMbVQ1NgSUER8FV+3H0HxN72HNYfQSdWUdiLUCD/CL3VIFvRFAXnAPiQ76PwptTVyPvBO+McW3GafM903oAdE0MYLxlcszOC30IefjoBgHfDmlVSt+ZE6XroGel+6Fm5/6PXy9n/9vfSdv5ZapiUaWo3PykQhaWWU679C+nf9oKk2ntgK4O745qSbO+Sp778TalfuULC1VXzkzi61kelwIRAikzLAXPMZGhvz1ZWIygtKU03JK8YHLklGR45GM7lJkkRgLlOqrOzW3qw+WI4HJI49plqqK+VutpqieB+OpxvcSJ7z+9l6Np/Exf2A7GMAuRFT7RAZgKFZw2C74IH1kvglyAzski3oBfrIh7DQPdXnRmGgMMzXyGv+YzYxnUmWKQhWBzohSUN8H5VePohfA5+XCii1lxiSQvjCNZqmFVR6X7iednyic/JBV/+jLSeeyYelJnLZ+TFPf3S3NogFdjnSLujU6B53RpZ9t7L5Jl//QZGJdDAsOiI9vYO3vOw7Lr9l7LyT9919AT003lJgVcFKTJmWovgQft1anhPsSzQCwyK/Ixci4xLXZJzlbGjQkDazSjzSINDQ2r33vraGmltbpTamprpm6+ikVZYdBArjA+bQEPaF4gOevNKwQ9XAeLak428EErxF9EJZGpVCgLQDwsE1SJD/qBfi1joeOCX17RKobR/6YH37L9VnkfeNa6V+RQCIBCO5pBgfRL2BRkJDnMPNjQ9HcxTloLb/dv75Y77tks/gNcKxWTFeWvlPeuPl/vvul/cRSfJ+pVYOv1anNMumz79C/nEv3xAajMvyZNdYbnkAkgEryWNyYbFO0Fjw6vh254bLhgOywnvf6d0bHlMuh54TGn4sfxOJiU7vvVDaUJHpv51y+dGZXQpZ4wCRwUpG2PGqVQSQ3hZFAiMCgDkfRPe9YyVspQyAgHIzunIsGmXcH97p/T1D8jiha3S2tKIIcCpk6pocQK0z1uvXyfx/7oepvNhj8s3ZYInLAMPItPINe/hlP9hz2NBhyEZtgAtuBp9Pur3yvQK+KXiUovLhjmkHd+4WXoe3Qa7LDlpWnuKrPuXa2UhhvtKwb34m9/Jb9ob5Nr3r5Ph/dvk05/9T7ErPi5LEr2SxCjBa3ZoCyGYM4BAIHZ6EFqtM7ONC03auKB1CsO/CWhUjgUqvkkPuLy3ylqN3rPb4reL8fU9nL/yw4/fMVFxCgE9vwJIFiRsL002xkLuhcdeI0EbQ9tt3XCOdD/yjOInZCgBdL66n9ghT9/0XbkQUncQyknaaQr4FDgiSGXBDLnhoMvdGQuN3I+kz6MUUAwCH+3wcFJe2P0yrLa7smRRy5TPVZlLFwmPUnVZWBfZ9rXvyuC23Vi4aUvDulPlvBuuk6azVpdMkWEZW5pPXS0XXXgaynSyPP3zR+XZ9qxcfvZaSVfUSWZwQLphYTvT3S3P7RuQcNNCOfeMJaIs6oDLHtyxQ57c0yuh+lY5f90yiZABQ4qEGRtpW3qSxLFfqYEOXTv21hrqT8qL+3qkcdkSOWNVW6Fjk5WnAeB7O5LSuvw4OXNl66RoA6M5kn72edn/kc/IQCSm1kkVcGNkCJgJsxNBf+8gOPGqMExMf9yqZx6meNfogRF8lL/6wTUSUsO4iENWQL0odVb190CPw70cgqa/ShfgU7AXpBKjjThveBoSPL4RdmqYELNAUBXnpZ//Vg5cfoksvug85qSdpoCiwGFBivNPSax1ooKEdhOgAL9NfNyUOPe+fAARDFm2tFWC/BDngbOx59fO794qe277hVg1FVJ/zmlyBhZqNp1ZOgDF1wA7pPLcz34sV7/8BNZztcsDXTXy9XVN8vBNX5Zdr79c3l7VLh/75DfFOnG1nHFSqzz97dvk9uUb5IbPv02e/f4tsun2p+W89adL5x0/kV/e9w75wjVep8EMW3Lwwd/JrTvz8sE/XiM3XnmNvNx2nqx9XUS+9R83y4c+u0nefGal/Pjfb5CbnzLlrFNa5Y5bfiqXfPhKefcFkxneAjCkMD/c3SV2AGrdaH8KHHDinCFvFEAAGtVWOPDhvCJBgs887AGocG4TPuqg5IOEiDMKTFRQAAo8OILCuUc6zld6OXjAwnSVP38AXgQjgqGXDs6Mz2cIR26Sx4/q2Hk25vhEuQCskacO9coj//RV2KhcJNVLF/uP9HmeU+AVIEWFCFqLoLXdkS7OPCfSRKvPj4/KJfsOHMCefDFpXlC6tvYmWqeJhOM8Xd3pp8jalSeoNlO5DEzmuCUTiTqjYcgg3boqOeGkZjGtFfL+q0+TdQsiche0opVwgPnXQ5HF8g9XXykXLa+UxKUr5EN/eps88tJq+dFPHpLVl14hV75jtfTvsOR9190hez90lTdvh1pwGI3budBcdTLSJJf+zfvlj0+rl3rrRnl8x15Z22LJzXcclCs+f628eXWN/O7rPfKf/7NFLj57uTS85tEtxfa975NzkJDmlA8AhOuQCBDqzFIReEhlgIS6Zhn5XPl7iEP8UcpPfACnYtAPQEKfPJBJnRGQFlZhaxXhkU7hOeUhlQYAin/qGSKwXHzAZwRLWsZgWZS1u0I5mJvvAtjs9NBjO+SFO+6Ssz72F763PpMCJKJHyHlHj1eAFFXLqcGn3eQoQIkqAVt2+w60ywKo3SrT/pNLau7Eok02AJWN4WH2xrOw25gHwzdmyu7aBCnlOjk56czz5CN/tn5sDJSZ37+ddGT1GZACAVB08cVnyBuW/FT6ISkmQq48d+fd8rF774HiiiUnr14qQ0nYoytisnz32LdHlja1yhkrvQ5KS1OTDGK8LJPNSHtHQm75r5vldnxfsLgqp164Brtxjy3KxO4YCQc5frHjPcqgikSRh47BCsFZR2KDeo5rBSd+GgAY9RCBFcBxoo0g4z9XKAcvJKKWNfiJM22G4XmMY3pjPNSNKssrvZWPKp9jSwLLLTz3ikSPEHM6vJE358bQtr16oDIcWUInZEod2pKi+9HSBWECaD88nBja5mySZUorP7HExoCU0uTDOiftJk8BxbTQiHphFbwHyhQNUE/nh13OLgAwGt61R5750rcl0XFI7c675rqrZPlllyjrAiVTdzJNiFOv4KnwIPMO14Rl6y9/Id8/71T560tOkG2/BKA8b8gNrU2yIhCX0DkXyleveYMM794i3/lFSk6EFOYA+HzHNJi2UtPnBZy/jrCytlFWvc6Scz7wHnn/6xfJo7+5W/YYTRIf8wV6ccrql6BZoMWr1YudiHhbsxz/R28rBJ1gxFdL+LU+L4BC/WP3SWigR3W8crA7ONx2nAwvwWjB0Ry/dR4ciXo1BwCse+pByVTXSWLxiiPHwbRBrGOfVD//lLS//u2So2KW6m28Wgbl8bzoE6HBSm+BrgfVs9RAyoCuVALPoLfc24vJd/SUqr78xbJGKRPWqpe/552YU+iXZ774Lel7Yqc8/k9fk0hdjbStP8f7aEvgvYarwhLPFzX5QpnC0bBUYLdW7B4nJ6+qk63f+65c8W1DDg3b8t5PfUhOxNKClk9tlM/84/flsivuFadnSC76wPsw54j0WivUJu7YNE+qolRtx7klrDT+mHwEvfEoxrcqapbKx65+i3zyhi/JD2+EoVUsZP2rT586yU4xvk1IZ7DvouZ4sHGMGq4kGlDK4ZfL4TsOu/FaKTWwMPDzrj3kYBiyUi+8H47zVF48399Lg+mxGXtPVTzcYhclz4fXOJg+g3nr+JA+pTE6nHKQzqiEAcKJERn3HsB0mcMJV7xVWrGeSq23VBFn4YcghT3w6p59RLIAkFRDi4T7D0ntjsek/4RTpeP8t2AolOVHRSlpqcqhYogX6u0CsPXK8LKTUGHPT01YMwxGF1RYv0oQvat3PiWJ1uMkocCPz+EU0CFdnhXB0PXNOWKmhr179ZzELqSvylC4V+G9ZMrld0xLUTb3yqVms1wPNBnspzUILT8wrU2bRDZvnnSJ+JnnX9ov9rPboYIOixNopB7DYJPnU8+pcOpTH/VnWAbxQjGed+3d85cl9cIXP/Oe+/FUEMQdG5a+3tAP5hvAdOOLW6TqdYvFhtJN37YX5eFNN0ruH3IKqALcknqW3Tl/eZWsBVP1ajFamAs/9VG1xuulu3bK8tMvkg9eebEEMMRnRuJSHfeWE9SsPENu/O4q6e0bliD866qp85eXL9/wbqUgYyzYIB8B0Ti8+xeb/lb8rfrO3/hOOU/laMjxF/6hfP/0N8gAwK+iuloqomM+v9ECvdoVGHqQC4jXnCvVlTXggd575ctVbUP1sllLgpb/DkffHd85wUO9TxWHGSKNQjyukfPfq/IaSYNpMRzzwQ+v+UyF91qSeqaGDr18vSQZzsuPihXJQ93See9jAFgMnVG5CG3URaeu7uQT5KQ/26g0/2YVpFAnOmyDKD2nrpPBFadgB0JHKvbulEV33yrpxoXSd8paCQ6jE9oPSQuAlWpskWA6JXXbtkq8fZ/YALdsdT38kkoaY1rpBqh/jnMK7BTIFB6AFtgtWEL9XRLMYPkP0nBwKFpzPBlhDTsjYYBhpq4Zuy6aEu5ql4CTlSykdRdbwE9IihtXjlK+HflKXOw+SWUJr2mXcpHnRtk4xJfGGHJfX58ct3ghv+VJOd/iROa+B2XwU7A4wfke7MWmNKV8JgEGwDdHhuQxpdFramrRkoTXg6Y/Dw/a/DRGn3nx2TP3mArUq1WLABMZSdtLy8+L617IpDwNMBPMD08ASGYoKF1YC/PA3/2rXPiVz8A00tpJ1X8qI3E9Dvu94x0n7JUDndhRM2HuqhbHeMetJhqbIkXekJx88AUD8WE46KeHkLT3WOyiFVUShfB1TA4vNHrS8dL2xU1Sv2jxUbfqYMNT8AS0UB2WQsYeZB29FF6jJSxNLDQB6dWGtjlv+fg/3iQHf7FFjLBHG6qkR7Ag/pSPfkBqSnSZBWk3tAKdlPZ1UvXis5JcsFAW3vtjdG4CEhoelL6Vp0u2okaqX3hGrOSwNG25W3pPOkOaHv2tkppDgxj+P3mddJ95oUd0hd7j6I88+LYaEad697NYbI+F+1gcv+/NV+DdeZKVibyat9yF9X3V0rlugzT//pdSsW83hgDD4mKh/4EN7wBA1uIj5RdaHm4EpJSq6uEIVx71nPFasLlxji85lBS57bZjzl9tEUIr0lBsoWUHMlu/GXqMiKyEliO83q7qeeHea/Zglsrfe+ZBkFckv1vix2Q8/tH2BNNnTj6j84GK+Xjpegub1Rw92o6BcuXVwm+UkRILPiyqZ5eaAoVX81f+mnFLYpUeRV75tMR8FILgLSjGduSy8T0ph3Aj177fq5y98BONhfQnELTjwa2y59afF8qNVolGRrbTdsl5suIdh99b6lWKOaOPMzUNEj+wF8BjSfea8xU4VLy0U2qfeVR2bfyIhE/sxvM9akjQRWelG9KuE41Lzc6nIWU9Kj2494YKD1NsEgKdvmHMT6UAgnxhbffcIfGXX4SU1ABpCTte3/tTBXpdZ62XWPvLGIJ8Qg5edJlkK2ul6fd3Sd0zD0knhiPLyY2AVF6NcauWX071m9W6ULpIQhHlWCCKFifA/vPWuWdJFbZjz6OhqiEdtmC+Lp4wGcBLNQRTUJ/iiW2ezgczXqtwvIBTQeGhwnpe6rl6xoBIg1KY7/y4o16FfBGAyhNpSHk7vvE/0r11BwA6K41nrJJ1/3QN5hhO95Mo6fOiCy6Sj55PYJ4jji+Yx0TQoQSqRKWa7V/9niT2dyqTSGxHOShLVC5qkVM+8j4JxeMlUMqiIqD9K0f6ckgO0kn84F7JVmGIFUNyNc8/KaGhfkg76NhgODAHs092vArniBp6C3cdkJrnnsRcUkLNcTHOyEdZlM1IHuxIIK0I4tVvf1xcpBOExR9DffNBSEy7IF2ZsnvjleJiODH+1BYAl6PmtRgviGFAg9yCRqgpwfsMYHxec+y+CKRQJxTefy9zrB4lWVxqdjlHUy2dYKn5ToIYBuFRqi4LO4bP/vu3ZAAb27mQphacvVrO/te/k+azzwAPnRutitubzxmAKtWGcIRysRO88wd3SPvdD2FOLwxegz/0ngKYs135l+/Gwu9TjxBztr0BHFwykBqSxsd/L1W7t8ueyz6o5p6i3R3yIgCjas9zGN77lQIFBVgACXLSBVt/J1ZiUPa840NSs/1RaXxiyysqQ55LMOE8E8/WQJ80P/Ib6Tr9Auk9ea2suPU/JIAhPw77DS05HlJUWNp+9SN5+a3vlVR9i7jYJqfrzPViY26y6sVtmC/DPBVV5wmIZeJGQIp8ZG6wkjlEeUXT8qeqi8XfL978E+wN9HP0kE1pOgcWGzZdLS3nlKHl8znU/EqpqIMvviS7v3272mrGIBPlMB/m/+rXrJQVG/+g9DoylGrQwWy5705p3HqfmIkBKCnAssj6SyXVukQ4x0RtPw7HxToPKMmF4bM1tWoYbvHPvwfVcii37N8tbXffBmWKl8SBUoOhRqzIExQ8gekGMUT3sFRiyJBARHX0VH2z1ELrrxLDfJGeTox0cLAeJIPyRcf5b5aW+38pC399u+zH/JM3N/YTcTBHFQZoHtjwh0iT4csQpDREqXYwpT+UIIJQICh3xy1bamFtYt0XrlPNKN7WJrUnLi/3auv6TZACOTDvFyBFDe3cA9VzABR4NEcZrKpKOenKK6Si9ZVabxNMenqCcQQkHJV9G94JJYghBRJOvAIA1ADJBUOSaO8DK05WYSK9h5QkwyFXtZZq0Qo5cNGlKs7QcSdKsnUxAK1XutauV8OFHK4bGYYDKHWte4OYGDKkI4A58UoMJ9Ypic1FGTrOeRP8KgBQlthrL1IS0/43Xi4xzHtRitp3ybulcs8OMaFF2H7OGyUDgBMMD5aTG5GkqDpLploKqp/lQGD2k7g5YsyMyZs2biyHKh2xDlQvjy1oECdFCwxYG1RdoaXyI1Jrfj3gMN+LP/ixbP/yt6BmjmEwmwN9cNj0cOXf/JGsuPytJUgQlBDfbgqLd1N+S+b8jn+wxOCViaUnSAJA5K1Xgh/mhej6V2EEgZXkEB3XSyGsmtzlx6HCKAqo9FJNbSLNxcP4Xj69p53rpcE8C1KXG4NaKO4JWMMqX+/ZwIlrFPCrtFV4RCkjNwJSQUx8ByAmujRwpt0xU4BtxcRimSpYnIBj8yxjZ0jnw4/Ljv/7P5Lu7JfYkhY59eNXymJsGc55Hu3mMQUglYRrqmT1Jz8iASgWYI2C6ggb8bAsvfSNYkJjtWRdAXSOWD71vKCWRLzwXfF8UHEaxWH8sJyYO5x/cRp+2OJzcboAw3J2IyBFKUqZz5+Cif5yJthE60a9t1gsIjU1tAN3/USjzclwQexKvPgPNmCPpi7ZdsO3ZWDXy5IZgkYTVHDbLjpHSehzsmK60MdMAfKURW+7WJZc+qZjTksnMD8pMAJSrH4Y5vIdx1O1nJ/kmKJaU4wC6NdDiqqtrUKim+Cx+ZgSd1/cI1luFJfxVNApm/lq5n5HTJ0ps+GCi3jp6OcfWPKkNKqU6jn98QDLmfCcgb0ISutKxcE9/lUYPmJY3uOSv4zjDdzwjKCQxCOoa8WKNmVotvfJ5+Th674k9nV/qSQqmk6aKqc6U1OV2BxMZ65Jpxz21k5TYLIUGANSFkzbWFkTu39DHVK7SVOATDsGptxQD00fDnEcgzsE/t8AeMhueVyG/u5L4vYPq91NCRLcy0etkUKGHHSgqRvu+8P8lWWJgrka7xqeABmXwy0408oERmJUWgQ0z9aaBz+uSgPPkX5OhfcAiYt2mRbBCUqxqlYMQ38FWNBUsnOYtAVgBTFPxd1WH7n+JglVV0rbBetU+GP5QR2NXEdHKPMrqPtyTQ0RtNQcyjSdpaJmnP3ooxJCPhFMnHP7i3J0HNmJ4BviWbv5TYExIMUGEYaFABt2oLQCxeQaBlkU5/ZamhZIRZz23abGGdy7B+rd1I7ieyIjhM8rGKLvx097/KHiUEEGsQhqtBfBayrNcIjbZwi49UKwA4y6MCylMN76DJh71tGfcT2zSLyBfQosznRhTEmFRAQD0vkU2e0z9ooc2nX//ffuuf/+GuZQis5ETy/Pj2gaXRDaCNGLL840ZLPpaD7vmGXIyMl/BgYHQmnHwQIqY+o+pGl8Lzrp6aHAGJBiFpSmolhsl0qlwbh8ljQ9mZdXqmT3oBfElObmBlm6ZOGUVM+3OBGCJFL19evVOpPRYTdCAaHIc2rTvQLD4psbETQIOvRQZ4b3evuUuiBsKUfAKVyq+/F5+M949q7xy/TUPeAO0lOqr1+2f+170v3k82oLi5YLz5QzPv3X0nwmt2s/Zhf4d5HncPwVUqL1O1ak9FxlpSXV1a/4rqa0oPG4E96581DlmjUdV111VWLTpk3eK5nSTGY3sc9+9rPGLd/+WdPCv//q7wItxvGzWxqd+2xS4LAfE8VsGpxNZ9I+R5rNMs6NvAuI0NBQK8uw/XV0CrWWyI2NxQsljKNUXRoAteO/foB9pQ6Ii3mzxrOwoBcA1Xbh2VNVZOJoAkcnjt6pSnTK0+lF0Xp7pxs0OCCPJdSS2rx5cw7HlFejBBLMV0iF24qCFBvGLYFyzdsisFFDj9A4LGhMI1WOmB8109gpp0RF0dsfCprGsszZpD2JE9aLAVArli2Rmkpq9M0f56CN7PnhnbLnBz+DIgbMwZy7Wk7/9Edl4dRaPuc3ksWBSS/tQIHpBsLZJrJRH1sUDOeMYAjrq1IWtkxBx1m7WaIAwMBCN7HKyQcHM+kZHcU4IkgRlCgNUDMnhUWarlZNP2zrIIDHsGnegsZ6WdzaIhUVscOGK2fPHJhIxdI2ORWSE3s21cuXSMPqldOxRopcSnOqcm5MRXV7Kbkjc/zup350YSjy8UcX1ksH1lapcevCqEVRUH05XRSgpIKOZ03GkdP2H3LDL2y/5YXduziawSlqjm5MuzsiSDFnAlUE81OcpyJQZTIEKwh8hUaiuAWu1S3PiOP5FYIoD/rjQj1XTwvtjPG8g3l5195Z3TPWmDhMg/+FOCrJovjK339elI7Ko5DimPyKw/C6ELcoHVwq55UDl4yPeTrO/fDdWVj5TRXz1uYFUocz7+ejsyrj0rbhAgVQrL+WuudjK5iWOmfvu+ma7575xj/tWXPeW9833NCwaF9DTXU3lnZkMZlKkVpZ/vcmW3mn/qelJOWeKBkaD0VDSE24goqW1A4nZXHnocHK3r7O1GP3//CnP/vSLZJIDM8kOY4KUn5BgliQF4emWiQSAlBhB0hY+SVY5bBfkgcuUBogl4ejqXjF3NWZfgiDynvhVBDyehVGbbZXCE/mXwitAvHOAwf6whWUOOivFlvD2w9TCOClifS4iJvOi0lQKdyr1d0FX4Tz/JkQD+6bxIgqVaSBF+bHox/DoEcRhLZbOGRBYopLbU01dkatULvvzmfGrOquGrhHZ/2rKTAFFODXl8lmh7u23HnTz8w7b3r0hHPfffLyszecu6q+ZUV/VXXjQF19y3BdrZXCRpspEyM+UN6x2b/326L6rlkSft88z3NHDCKg81xEIxNsLwrZIwpr7zEISJGhoXxNd/fB2u6+LjfRfaDryXvve/TX/+8px3EoQXXggLLCzEhRyEcmBFIMSEZkwoIAjxhePjf084CJDHy0DShtMUUMROIDMngSxA8zprGM3niAxJyO4FRao/n4obwy+Hce/QtBC+1yNI/RUCzaOP/CLbXaRgvLa3oQuIhR0GLD8GcIa1VMrAPSixRJH+00BaaNAhSW+nCkseRgYPuWm/fj+B3u645bdfGiBctXLqyvqG0O1Dc355paF9sLmo/LW9FG1woYw6GgnQiFQklYQ0ngW03j4C7SY9wYHoAvfBxLGBO21G9U1cbVzwcilJ3CQwQ7IMewRCQGQaMinbXjdi5gOVgVaSf7zL6+fVb7/l1Gz/72RGLgUOfu5/ZvfeJXLzvi9CA6dm5Vx2DhPKPzwhMGKRRuxHmAVf7WvUcqrC80BTQFZosCXBLH4aUUDq6Mp+mS7j3bfr0XB++5hqqqoXZZZdWClupQqLIiWltXU7PkhIWNjW3NRm1ji1lZ1RQImtVYchFIm1YuGwqZyXAwmrIiYTtkBuwQRogwpeEQyMDY2YFVozxImLjlLceAPzDA70z7eOad/TsEphuHFZ7nEX7HRWVkPzrP3gE/XKgNDRHe9+cqR/LiAPxMjG6FIAmFAECm7eRCjmNXprOJEIa9YnbGCGDky8m7g24y0Z3r6Trg9rS3Jzt2d6Q7D/ak7YHhZG/PYG/XrkGsSxtAtqQ1LTpQUYlSEw9e813MyDwU8hlxkwKpkdj6QlNAU0BTYPopQFZOBsmDDJQ9ZB7kX1D7E6u7bzcPApi6px8O9Rw/IUS0Kqqb403Hn1ZfUb+gJlrdXF1b31prRiurw9F4NRh+hRkIhvNBbHBrWgEXe+w4Yct0g2bItoJh2wpFsR285QaDZj4QCLrBAEb+zaCDBYLQaOUQC4ZaMGWAI4cpAYIHC01A8XfSVuCCKQffnyNNCnhgIJabJeY5jwEUDLi5XCDnuAEnnwvkXSdo227Qde2gnU2Fcm7GzDpZI2vblmu7YZs2ZHLY4DiXgbWXRC6dGswmh/sz/YcGsn1dvT2H9g30vbSzr6971yDoQAmItugJQKSluseZ9zx474MRrxkGA4EeVuM8K44vUTtNAU0BTYG5QgH25HmQidJxFoqOZwKXf/ZBzASnJXCZwwMdweGt/8vnxIvx4fy4YUxphEOV9eHqqtqQGa6wwtGIFbSqQ8Fw3AqHMH4YiloY7jetUNgE+zaDACvYriRqBTA9FsCwIgzEGEbehcEw5ELIQn7KqUkSlD4QDOZdAhJsmeEHulg5GBQzXOwCDMtjOcfOZV3JZhzsxZW1U0k7mUpms6khO59N24lk2nYy/Zmh/oOQkxwfYAgmPHxgIY2KAYb62XzmAxPPfpjiMzHUP3A5+06D1Oy/A10CTQFNgclTgAyWjmcyYTofFJTwUrgnKNHx7AOUfyZA+SBlgPEbTl+nJPs6/fgMx+vxZ/oxHs90fnieRwQm9eSVP3zuOx8UfD/WhYfv71+P9/fD88xnPlDx7N/7cf0wfprFcRG8dJ0GqdJ9N7pkmgKaApOjwEQYsA8ofg7FQEM//7l/pp8PUsVh6ee74mvfb6JngonvfGDhvQ8q/nPeF1/7YYrP/rVPB97PWadBas6+Ol1wTQFNgWOggM/8jyGJEQmKaTA9H7wmk+b4+GUBMJMhxPg4GqTGU0TfawpoCmgKTIwC44Fk/P3EUhkNdazxR1Mqo6tjEU/LiAy6KpoCmgKaApoCpUgBDVKl+FZ0mTQFNAU0BTQFFAU0SOmGoCmgKaApoClQshTQIFWyr0YXTFNAU0BTQFOAIHUsGimagq9OganoCHAtRrk43d7K5U3qemgKzAAFsNw5vwj5LJ2BvOZjFmTI3Vh8vn2yleeidMTl9rblAlR7QY99k6WHjqcpoCkwvyjw/wGQ6HddddMYyAAAAABJRU5ErkJgggA=" /></span><span lang="EN"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Important features in this application pattern
include: </span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><ul>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><i>Pre-built connectors to feed the
streams of data into the pipeline</i>. VoltDB includes connectors to import Kafka
streams, relational data, and also supports HadoopOutputFormat results from
Hive and Pig.</span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><i>The ability to process data, to
aggregate, de-dupe, or transform, as part of ETL workflow.</i> VoltDB transactions,
implemented as Java Stored Procedures, allow developers to transactionally
execute SQL, combined with Java business logic, to process each message
individually or in aggregate.</span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><i>Pre-built export connectors to
stream data downstream to historical archive as fast as it arrived</i>. VoltDB
includes export connectors to stream data to Kafka, RabbitMQ, Hadoop, Vertica,
Netezza, or any relational data store via JDBC.</span></span></span></li>
</ul>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Applications making use of this pattern often
are processing continuous streams of data that must be validated, transformed
and archived in some manner. One example is processing device ids (usually in
the form of cookies). The pipeline computes segmentation output intelligence,
providing correlation data to be used for advanced decisioning applications,
often in the digital ad tech arena.<span> </span></span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">For a fast data pipeline code example
demonstrating click stream processing based on user segmentation, using VoltDB
as the ingestion and processing engine, see<span style="background: white none repeat scroll 0% 0%;"> </span><a href="https://github.com/VoltDB/app-fastdata"><span style="background: white none repeat scroll 0% 0%; color: windowtext; text-decoration: none;">https://github.com/VoltDB/app-fastdata</span></a>.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><b><span lang="EN">VoltDB
and the Fast Data Pipeline</span></b><span lang="EN"></span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">The fast data processing layer must have the
following properties across all use cases: </span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><ul>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><i>High ingestion (write) rate</i>. The
pipeline must ingest data at historically challenging transaction rates.
Transactions occurring at hundreds of thousands to millions of times per second
are not uncommon.</span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><i>Analyze incoming data in
real-time</i>. Real-time analytics enable users to derive seasonal patterns,
statistical summaries, scoring models, recommendation models, rankings,
leader boards and other artifacts for use in user-facing applications. </span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><i>Real-time decisions</i>. Enabling
real-time transactions against new incoming data makes it possible to respond
back to users or drive downstream processes based on the output of the analysis
activity and the context and content of the present event. </span></span></span></li>
</ul>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">In addition, the three patterns require a
system architected to deliver: </span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><ul>
<li><i><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><span><span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-size-adjust: none; font-stretch: normal; font-synthesis: weight style; font-variant: normal; font-weight: normal; line-height: normal;">H</span></span></span></span></span></i><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><i>igh availability</i>. The pipeline
processing engine, in this case VoltDB, can survive machine loss or (most)
networking failures, either for routine maintenance or due to environmental
issues or errors, and continue to operate correctly.</span></span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN"><i>Elastically and horizontally
scalable</i>. As throughput increases, more machines can be added to the pipeline
processing engine to accommodate the additional traffic without interrupting
the running system. </span></span></span></li>
</ul>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">VoltDB is an in-memory, relational database
that is fully durable and maintains strict ACID properties. VoltDB is highly
available and elastically scales-out on commodity hardware. VoltDB includes
a set of pre-built integrations, both streaming importers and exporters, all designed to
help you ingest streaming data, process it within VoltDB, and, once processed,
export data seamlessly to a historical data warehouse. </span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;"><span lang="EN">Whether you view your problem as OLTP with
real-time analytics or as stream processing, VoltDB is the only system that
combines ingestion, speed, robustness and strong consistency to make developing
and supporting apps easier than ever. Everything we build enables fast data
apps. We’ve helped our customers develop and deploy hundreds of them.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: Arial,Helvetica,sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-family: Arial,Helvetica,sans-serif;">
</span>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-74987739653533629312017-07-31T07:57:00.001-07:002017-07-31T07:58:45.298-07:00Fostering Innovation in an Agile Scrum Organization<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: x-small;"><br />This post originally appeared on VoltDB.com on 7/17/2017 </span><br /> </span><br />
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;">What is Innovation Week at VoltDB?</span></h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Recently
we held our Q2 Innovation Week, culminating in presentations and voting
on the innovation projects created by our engineering staff. VoltDB
engineering is a Agile scrum organization, with two week sprints, and
product releases every other sprint. Innovation week occurs one week
every quarter. During this week engineers work on a self-directed
project, such as exploring a new technology, learning about technology
(such as R or Docker), or just something technological of interest. At
the end of this week, engineers present their project to the whole
company, including marketing, sales, and the executive team. At the end
of the session, the entire company votes on which project and
presentation they thought was the best, with the winner receiving an
iPad. This creates an interesting presentation environment, because
people may vote on what is the most technologically impressive, or the
most marketable project, amongst other things.<br /><br />Innovation Week
work is not isolated from our product. Many projects seek to improve
VoltDB in some way, and some projects make their way into production.
For example, one Innovation Week project in the past was work on
user-defined functions, which is being fully developed and added into
product. So while engineers may be working on something esoteric or in
an entirely new space for us, if it’s good enough, it might just end up
as a part of VoltDB.</span> </span><br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/LdKkzoNRqqc/0.jpg" src="https://www.youtube.com/embed/LdKkzoNRqqc?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span> <span style="font-family: "arial" , "helvetica" , sans-serif;"><br />The Q2 innovation week was exciting for an addition reason – summer interns. All of our summer interns participated. In the past, interns have won the competition, which again happened this year. Tianhe Wu, interning from CMU, and his project on data visualizations won by a big margin. Congratulations to Tianhe, and we look forward to future Innovation Weeks <br /></span> John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-58008947084823055742014-07-14T06:13:00.002-07:002014-07-14T06:13:43.923-07:00VoltDB Agile Development - Monthly Releases, Strong Definition of Done<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
Here's a short overview (2 minutes) video of the VoltDB Development Process, our use of Scrum and our strong Definition of Done (DOD).</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I had fun working with VoltDB marketing to make this video, an thanks to my team for pitching in!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/H4ajA8Jdjt8?feature=player_embedded' frameborder='0'></iframe><br />
<br />
<br />John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-54909138996795279802013-03-13T05:35:00.001-07:002013-03-13T05:35:11.300-07:00Football & BusinessI had the good fortune to attend the Mass Technology Leadership Council (masstlc.org) Annual Meeting in Boston this week where Robert Kraft was the featured speaker. Mr Kraft turned out to be a great storyteller. In addition to owning the New England Patriots Kraft is the CEO of The Kraft Group, which is an international paper business. He has years of pure business experience so his stories were full of interesting business-relevant anecdotes. But even when he was talking about running the New England Patriots the lessons were business-oriented and you could see that he has a strong sense of purpose and passion that he has instilled in all of his organizations.<br />
<br />
Early into his Q&A session Mr. Kraft stated "<i>Life is about execution, not just dreaming.</i>" <br />
<br />
This is true in both sports and business. If you don't execute in sports, you lose the game. Don't execute in the playoffs? Your season is over. If you don't execute in business, you lose the deal. Continue to not execute, you will eventually go out of business.<br />
<br />
Though I could have listened to Kraft talk for days about the New England Patriots (his Vladimir Putin/Superbowl ring story was incredible), the business-oriented nuggets in Kraft's speech were even more interesting. If you get a chance to hear Kraft talk, do it. He was interesting, often funny and very inspiring. <br />
<br />
<h3 style="text-align: center;">
"Life is about execution, not just dreaming" </h3>
<div style="text-align: center;">
- Robert Kraft</div>
<div style="text-align: center;">
Owner, New England Patriots</div>
<div style="text-align: center;">
CEO, The Kraft Group</div>
<br />
<br />
John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-83016950495309766012012-03-06T04:33:00.001-08:002012-03-06T05:02:54.361-08:00Back on the Front Line of Agility...Sorry that it has been a while since I posted here - my professional life has changed considerably since I last wrote! <br />
<br />
Last Fall I join an exciting startup, <a href="http://www.voltdb.com/">VoltDB</a>, leaving behind a "Waterfall to Agile" transformation environment, diving head first into the front lines of a pure Agile start-up environment. <br />
<br />
It's been a pretty exciting 6 months working with a great team of engineers. We're delivering a high velocity, scale-out NewSQL relational database. This product fits at the fire hose intake edge of Big Data and is capable of ingesting hundreds of thousands of transactions per second on commodity hardware. Low latency, high velocity. Lots of challenges, both technical and process-wise. <br />
<br />
Here's an overview of the VoltDB Development environment:<br />
<ul><li>Open Source Database. Because it is open source, anyone can see the our code (see our Git repository at <a href="https://github.com/organizations/VoltDB">https://github.com/organizations/VoltDB</a>).</li>
<li>It's a database. It has to work, can't corrupt or lose data. Quality is paramount. </li>
<li>We have Continuous Integration system running a large suite of automated tests.</li>
<li>VoltDB is in production for a significant number of customers. There's no dedicated Support team; the Engineering Team provides 24x7 support.</li>
<li>We have transparent development: our Product Backlog and Sprint Backlog is hosted (publicly) in JIRA. We use Greenhopper to plan and track iterations.</li>
<li>3 week iteration. The product is released almost <b><i>every</i></b> iteration! The Team truly produces a potentially shippable product increment most iterations.</li>
</ul>Of course, like every Agile team, we have our share of challenges. Some of the challenges we experience include:<br />
<ul><li>Dealing with unplanned customer support issues as well as pre- and post-sales assistance.</li>
<li>Dealing with technical debt.</li>
<li>Story sizing: specifically defining small enough slices of potentially shippable functionality.</li>
<li>Scaling the team: we're growing fast!</li>
</ul>We've adopting Scrum to help us meet these challenges. I'm a firm believer in Agile software development, specifically an Inspect and Adapt framework like Scrum. Because we're a start-up with a product smack in the middle of a rapidly growing, and evolving, Big Data market, product requirements can change often, sometimes daily. Scrum provides us the framework to adapt to changing business conditions while still regularly producing business value.<br />
<br />
It's great being back on the front line of Agility. I hope to find time to blog about these challenges as well as other topics in the coming months, time permitting.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://www.voltdb.com/"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTwhjTZGi-gwoapJOVBm4iLoy3mOed8-GgH-i8FtD32mVtfSL-R_tlFz7XdSmz-Z4JFDhHnzY_XaFPEo9RM92fCTg-ifTE0OwkQ9qAhiP7BN8Mnzin_oFRHO5ljMYO7EsIMZKSMn3j7Ec/s1600/volt_db_logo(trans).png" /></a></div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com1tag:blogger.com,1999:blog-2576341788609120403.post-36980579456796839432011-09-13T08:18:00.000-07:002011-09-13T08:58:15.956-07:00Scaling Scrum: The Chief Product Owner<div class="separator" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: center;"></div><div style="background-color: transparent; font-family: Arial,Helvetica,sans-serif; margin-left: 1em; margin-right: 1em;"><div style="text-align: left;"><br />
<div style="background-color: transparent; font-family: 'Times New Roman';"><span id="internal-source-marker_0.5251519992016256" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">We’ve begun our next phase of Agile transformation - scaling Scrum from single team efforts to larger multi-team projects within our organization. As part of this phase, we’ll be building and delivering multi-product enterprise-ready offerings, requiring the coordination of many Scrum teams across many time-zones. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Not unexpectedly, as we’ve delivered the first few product iterations from these larger efforts we’re faced with new challenges. Among the biggest are coordinating backlogs between teams and resolving dependencies and integration issues. Both issues are requiring a lot of additional time and effort, over and above the team-level Product Owner and Scrum Master efforts. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">In his book about scaling Scrum, titled </span><a href="http://www.amazon.com/Enterprise-Scrum-Ken-Schwaber/dp/0735623376/ref=sr_1_1?ie=UTF8&qid=1312836186&sr=8-1"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">The Enterprise and Scrum</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, Ken Schwaber states “</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">The higher the level is, the harder the Product Owner’s and Scrum Master’s job is.</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">” This is an important point to recognize and deal with: as you expand the size and scope of a product, as you “scale up”, more work is required for those holding the key roles in Scrum. Though this is a huge challenge, there are common patterns that can be used to help. One is the </span><a href="https://sites.google.com/a/scrumplop.org/published-patterns/product-organization-pattern-language/scrum-of-scrums"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Scrum of Scrums</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, where one or more representatives from each Scrum team meet daily to coordinate Sprint work and Sprint dependencies. Another pattern, one that I consider extremely important when scaling, is a </span><a href="https://sites.google.com/a/scrumplop.org/published-patterns/product-organization-pattern-language/chief-product-owner"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Chief Product Owner</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">The Chief Product Owner is a new unofficial (to Scrum) “role” that can greatly help with scaling Scrum. In Scrum-speak, this role is the Product Owner of the whole product. The Chief Product Owner is a person who is the single point of accountability for the success or failure of the complete project. This person owns the overall single product-level Backlog, and provides guidance to the group of product owners on the Scrum teams that comprise the complete effort. The chief Product Owner uses this backlog to coordinate the work, likely in the form of sub-backlogs, between the sub-teams, through each individual team’s Product Owner. </span></div></div></div><div style="background-color: transparent; margin-left: 1em; margin-right: 1em;"><div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"><span class="Apple-style-span" style="font-size: small; white-space: pre-wrap;"><br />
</span></div><div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><span style="font-size: small; margin-left: 1em; margin-right: 1em;"><img height="320" src="https://lh5.googleusercontent.com/ZsslTYjOp-RVuKyGhJa6GcDE9lubiHC0DXBiyiVAQhjkjZvNbZ4AlU76P-7_fZl-lFqr98Y4f_q-KEMF8MnqAEuTdx6GpnZDo8Vy5F64rlSCLjdG4vw" width="234" /></span></div></div><div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"><span style="background-color: transparent; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-style-span" style="font-family: Arial; font-size: 15px;">It is important to note that this role is filled by an individual, not a committee. Without a designated person ultimately responsible for the success or failure of the effort, there is a high risk of “death by committee”. By identifying a Chief Product Owner you can avoid this and have one final arbiter to order work and accepting results, as Scrum dictates for individual teams.</span></span><br />
<span class="Apple-style-span" style="font-family: Arial; font-size: 15px; white-space: pre-wrap;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">The Product Owner role is a key role on individual Scrum Teams. When scaling Scrum, this role takes on even more importance - the success of the entire product relies on deep understanding of the overall product backlog and careful and coordinated roll out of work to individual Scrum teams. Like the Product Owner role on an individual Scrum team, the Chief Product Owner is a full time role, one that requires a full time focus and commitment in order to be successful.</span></div></div>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-8729837345103550662011-08-29T09:57:00.000-07:002011-08-29T11:02:29.389-07:00Scrum: It’s a full-time job.<span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div style="background-color: transparent;"><div dir="ltr" id="internal-source-marker_0.8668752498924732" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;"><span style="background-color: transparent; color: #636466; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“</span><span style="background-color: transparent; color: #636466; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">An </span><span style="background-color: transparent; color: #636466; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">adequate</span><span style="background-color: transparent; color: #636466; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> ScrumMaster can handle two or three teams at a time...A great ScrumMaster can handle </span><span style="background-color: transparent; color: #636466; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">one</span><span style="background-color: transparent; color: #636466; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> team at a time.</span><span style="background-color: transparent; color: #636466; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">” </span></div><div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: center;"><span style="background-color: transparent; color: #636466; font-family: Arial; font-size: 8pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-Michael James</span><span style="background-color: transparent; color: #636466; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">One of the lessons we learned early in our Scrum roll-out was that the Product Owner and Scrum Master roles required much more involvement than originally thought. Coming from a Waterfall development environment, where releases were long in duration and milestones spread out, people in the organization were used to having key roles on </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">multiple </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">projects, context switching as needed. Juggling responsibilities in a Waterfall environment seemed to work well, or at least acceptable. Our Product Managers, for example, could own several product lines, including associated customer meetings and field interactions, and easily satisfy occasional project touch-points such as requirements definition (at the beginning of the release) and Beta and FCS duties (at the end of the release). These project touch-points required their full-time involvement periodically, a few times a year, making it relatively easy to context-switch periodically and satisfy the needs of each effort.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 18pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="312px;" src="https://lh4.googleusercontent.com/oYsN7vI3btIJHqAn1Og65NOB7FhyQoSsVv0vAS9jaUnIY6qm-z8jejpvcW5tMdJUxY1S_eJ2j_4S3414z-Ij4iD3xuYfi6lKqhrrrZP8KawyWjz4snM" width="466px;" /><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">With Scrum, however, things turned out a bit different. Though we “took the training” and “read the literature” which repeatedly said the roles of Scrum Master and Product Owner were </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">full time </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">jobs, we weren’t true believers. Our “muscle memory” way of working had everyone juggling multiple roles and responsibilities, it was the way we were used to working. During the course of our Agile Pilot projects, however, we got convinced pretty quickly that Scrum roles could </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">not</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> be part-time.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Scrum is more </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">intensive </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">than waterfall development. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">With frequent “potentially shippable product increments” created every 2-4 weeks, there’s essentially a full product release at least once a month if not twice. During our Agile pilots, our Product Managers, filling the role of Product Owners, soon realized that creating and maintaining a Product Backlog required a significant amount of time. Every few weeks a new set of fully-defined “product requirements” need to be ready for the team for the next Sprint. Product Owners found it challenging to satisfying their Scrum PO role and concurrently complete other project work. Our Scrum Masters, too, found themselves booked full-time, facilitating team interactions, producing Sprint Burn Down charts, working impediments, and delivering frequent product releases at regular Sprint Review. Team members, often with other-project responsibilities, found themselves spending more time delivering on Sprint Goals, often at the expense of their other responsibilities. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">As we scale Scrum within the organization, we’ve (obviously!) needed to identify new Scrum Masters and Product Owners. We’ve held fast to the one project per Scrum Master recommendation. Identifying new dedicated Scrum Masters has been fairly easy - our Pilot teams was that the efforts produced several Scrum Master candidates, a nice side-benefit! Finding full-time Product Owners for each team was more challenging. Because we’re applying Scrum to large multi-team projects, our mapping of Product Manager positions to Product Owners simply didn’t scale. Our solution was to look to our lead engineers. Most of our new teams have technical Product Owners, usually Software Architects, and they are dedicated full-time to the team. Product Managers are involved at either a co-Product Owner (in an outward facing role) or at a higher level in the project effort, via a Product Council-type role that involves them as stakeholders. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">I expect our organization to fine tune (via inspect and adapt) these non-Scrum roles as we mature in our Agility. But regardless of the organizational “noise” around the Scrum Teams, I believe that participation at the Scrum Team-level will continue to require full-time effort from all members in order to be successful.</span></div></span>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-18646648559075852152011-08-09T08:09:00.000-07:002011-08-10T05:09:18.054-07:00Why Agile?<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"></span><br />
<div style="background-color: transparent; margin: 0px;"><span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span id="internal-source-marker_0.6594484550878406" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">We’re at what I perceive to be a major “transition point” in our Agile transformation. Most of our Agile pilot teams and projects have successfully completed and we are rolling out internal Scrum training throughout the Product Group. We’re on the cusp of taking a big step forward with Scrum adoption within our 500 person organization. It’s at transition points like this when I find myself reevaluating our direction: “Why are we doing this? Are we ready for this next big step?” Our existing processes do, in fact, lead to shipping product and generating revenue, so: “Why Agile?”</span></span><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></span><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Our original goal, defined we began this transformation, still rings true:</span></span><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></span><br />
<div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;"><span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">The goal is not to release things faster for the sake of it. It is to achieve nimbleness and agility to deliver on the company’s strategy as it moves forward and/or tactically changes. It is about creating more business opportunities for ourselves rather than being cased into a model that requires our resource commitment for a time window that is longer than what the market we’re competing in requires. </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></span></div><span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></span><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Specifically, the software development group’s reason for moving from Waterfall to Agile is </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">to achieve nimbleness and agility to deliver on the company’s strategy as it moves forward and/or tactically changes.</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> We want the ability to efficiently deliver strategic products to market in a timely manner.</span></span><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></span><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Today we have challenges delivering on this goal. As a mature software organizations our development practices have been hardened over many years of delivering software to tens of thousands of customers. Our processes have been tempered with the successes (and often, the failures) of the past. Because of this, it’s difficult to change the current way of doing things. This is an understandable, and completely human, reaction - but it can dangerous over the long-term. Fortifying the walls, via policies and procedures as well as organizational divisions, has the result of business being less reactive to change, less agile, which ultimately impacts corporate revenue. New software releases often take longer to get out the door and may not fully meet customer needs. Entering new markets in a timely manner becomes difficult, allowing younger more nimble companies a market advantage. It is for these reasons that we’ve embarked on our development process transformation.</span></span><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></span><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">As part of our migration from Waterfall to Agile software development, we need to build a new way of working, including a new corporate culture: one that is nimble and responsive to ever changing business conditions. A culture that v</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">alues responding to change over following a plan</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. One that regularly inspects and adapts, and becomes better over time. Scrum, with its “inspect and adapt” framework, is one of the catalysts that can greatly assist us in this journey.</span></span><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></span><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="185" src="https://lh4.googleusercontent.com/BIJ-HsXHKUyDajXAWH7xtzeFlTsv_dhi8cpeLDIB2okHz9ZVTNWTDRbgAj7BI4WFUElRebo1qidz-FFl7J1psf_zEQUxSYwSigiU3TaJspeOuupOOhQ" width="400" /></span></div>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-84395893676719522522011-07-19T07:22:00.000-07:002012-01-17T05:48:02.221-08:00Technical Debt<div class="separator" style="clear: both; text-align: left;"></div><div style="background-color: transparent; clear: left; float: left; margin-bottom: 1em; margin-right: 1em; margin-top: 0px;"><span id="internal-source-marker_0.6131536674220115" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Technical Debt </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> is one of my favorite work-related phrases because it succinctly and metaphorically sums up the obligation we incur when we cut corners during software development. The phrase was coined by <a href="http://en.wikipedia.org/wiki/Ward_Cunningham">Ward Cunningham</a>, the developer of the first wiki and, incidentally, a major contributor to Extreme Programming Agile methodology.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">The concept of technical debt can be thought of as the accumulation of product risk introduced by any number of poor development practices. Examples include poorly designed code, loose development practices, and, in Scrum terms, the delivery of “undone work”. The payment terms on this debt can be onerous. Usually the cost is time or productivity, sometimes both. Dealing with this debt during the product release can increase the work required before the product can ship, often delaying the release. Or, if you decide to postpone payment until after the release, the cost may be customer-discovered defects which can cause unexpected maintenance escalations and a higher ongoing product maintenance burden, ultimately reducing productivity and velocity for future development.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Regardless, like credit card interest or the National Debt, at some point in the future the bill comes due - someone is going to have to pay off the debt.</span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8s-M0HrCLngJu6ytLajvXlDgCplGhcYvBISRhPOz0-ryqlCByki0e2bZ5uddBP8fQLiwPYfVLWyocwe5VPIQqDA39Wi_KVP8S9RkvFNdqHK8ngyBSMLlHgWBgMREJn2aeGkkY_zB3hnA/s1600/technical+debt.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8s-M0HrCLngJu6ytLajvXlDgCplGhcYvBISRhPOz0-ryqlCByki0e2bZ5uddBP8fQLiwPYfVLWyocwe5VPIQqDA39Wi_KVP8S9RkvFNdqHK8ngyBSMLlHgWBgMREJn2aeGkkY_zB3hnA/s320/technical+debt.jpg" width="214" /></a></div><div style="background-color: transparent; clear: left; float: left; margin-bottom: 1em; margin-right: 1em; margin-top: 0px;"></div><div style="background-color: transparent; clear: left; float: left; margin-bottom: 1em; margin-right: 1em; margin-top: 0px;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">For new teams adopting Scrum, Technical Debt can occur without the team being fully aware that it is happening. For example, teams with a loose </span><a href="http://agilemakingprogress.blogspot.com/2011/01/what-does-done-mean.html"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">definition of Done</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> can introduce technical debt. Stories may be accepted by the Product owner without having code reviews, minimal automated testing, or no code coverage or memory leak verification. Any of which could leave unexposed defects in a seemingly “done” feature. Another possible cause of debt can be caused by user stories that not properly decomposed such that Sprint backlogs do not yield a<a href="http://www.blogger.com/goog_1822635027"> </a></span><a href="http://agilemakingprogress.blogspot.com/2011/03/ship-it-scrums-potentially-shippable.html"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">potentially shippable product increment</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> at the end of a Sprint. In this case, more work, either known or unknown, is created for “later” in the release.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">As a Product Owner, you should keep track of your accumulating debt. If the debt is significant, I recommend putting it in your Product Backlog, to be prioritized appropriately. One way that I have found to identify and track any technical debt your team is accruing is to plan periodic “releases” to customers. Product early releases, in the form of early access programs or Technical Previews, can not only provide valuable customer input that can feed into your backlog, but it also keep the Scrum team in the practice of delivering potentially shippable code. When engineers realize their code is going to be used by actual customers, often “forgotten” undone work can suddenly appear.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Note that not all debt is “bad” - there are often valid reasons for accumulating technical debt. Perhaps the underlying architecture has some scalability constraints, but getting the product to market, in other words, harvesting “business value” ($, customers), is more important to the business. The key is for the Product Owner and Team to explicitly know that this debt was incurred, and accept that you may have to pay in the future be willing to accept that obligation.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">The Product Owner should be aware at all times of work that is needed to release the software, including the technical debt that is accruing. With a complete and publicly visible Product Backlog, there should be no surprises. Keep an eye on your debt - make sure you know how much debt interest is accumulating...</span></div><br />
<div style="text-align: left;"><span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"></span></div>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-84616104153289891072011-06-29T06:06:00.000-07:002011-06-29T06:06:00.167-07:00Scrum Cadence<div class="separator" style="clear: both; text-align: center;"></div><div style="background-color: transparent; margin-left: 1em; margin-right: 1em; margin-top: 0px;"><span id="internal-source-marker_0.03447454213164747" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">It’s unfortunate that the the Scrum product iteration increment is called a Sprint, implying that each increment is delivered by the team in a mad rush, full throttle. The image I have in my head is a 100 yard dash, everyone running as fast as they can to reach the finish line. Developing software is more like running a marathon than it is a back-to-back series of 100 yard dashes. In order to successfully complete a marathon you have to find a one mile pace you are comfortable running at, and keep running at that speed for 26 miles. Sprinting hard for the first several miles often means you are walking (or even crawling) the last mile, if you even make it that far.</span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img height="579px;" src="https://lh5.googleusercontent.com/qIbojlK0ZUphoGlroxVXkp3mzAvIAI3KeUOF7IznQFsSU4guiFfxATLv6v1KPc-gAlioW9hjRR2FzIw0y6Bhvm_z9W95m9APQwn4J_M35spwjT5Dsw" style="margin-left: auto; margin-right: auto;" width="435px;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Me, still running at mile 26, in the 1998 Boston Marathon</span></td></tr>
</tbody></table><span style="background-color: transparent; color: black; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">One of the challenges many new Scrum teams face is developing a sustainable pace, sometimes called cadence, over multiple sprints over the course of a project. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">New to Scrum, teams often struggle to find a sustainable cadence for delivering potentially shippable product increments. What I’ve observed happens is this: Early in a new Scrum project the teams is (I hope) excited to adopt a new way of working. They understand the Scrum principles and the time-boxed Sprint iteration, and more importantly, they feel a strong commitment to succeed on their newly committed Sprint deliverables within the first few Sprints. After all, at the end of the Sprint they will be proudly demonstrating their work to their stakeholders, which usually includes there boss and department head. However, since everyone is new to this different way of working, it is inevitable that certain work, usually that requiring specialized skills such as QA and documentation writing skills, ends up being delivered late in the game. Undeterred, the team works extra hours, heroically delivering the Sprint goals. This extra effort delivers a much needed early success, builds organization confidence, and can kick-start viral adoption. However, this type heroic effort doesn’t scale - after 2 or 3 Sprints the team starts feeling burned out and may fail to deliver Sprint-committed work.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">In an ideal situation, the Team inspects and adapts, and, over the course of several sprints, build a sustainable cadence. However, many teams will continue to struggle, and can fall back to the “old way of doing things”.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">While every team, project and environment is different, here are some points to consider to help get to a sustainable cadence:</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<ul><li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Work, as a full team, on only one story at a time. Make sure that story is DONE before starting the next story. In other words, implement stories sequentially.</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Avoid picking stories targeted for one individual due to their specialized skills. Make sure the whole team is involved in delivering each story.</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Develop an “in it together” feeling among the team. If you aren’t feeling this, your team isn’t operating as a true TEAM. </span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Commit to less stories to make sure your Sprint backlog really is DONE at the end of a Sprint.</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Become more of a generalist. Scrum certainly favors “jack of all trades” type of developers. Coming from a Waterfall environment, where there are separate groups for QA and documentation, work can fall to those with that domain specialization. As a team member, don’t look at work as “that person’s”, view it as a team deliverable. Learn a new skill to help a team member (and thus the Team) out, be it coding, QA or documentation.</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Be honest and innovative during your Sprint Retrospectives. It’s your chance to change how you work together to deliver software.</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Get additional training or coaching. Read Scrum blogs and ask questions on Agile forums. Likely you are not the first team to run into the issues you are experiencing.</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">If you are manager reading this, realize that team cadence, a predictable velocity, is key to delivering on corporate objectives. Work hard to remove team obstacles and allow them to focus and succeed. This is the true value of a manager in an Agile world.</span></li>
</ul><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Developing a sustainable cadence is one of the keys to the success of the Scrum Team and project effort. Remember, running a marathon full throttle is unsustainable, unless, of course, you are an ultra-elite runner. I know I’m not one.</span></div><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"></span>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-15088214268999146932011-06-08T05:48:00.000-07:002011-06-11T12:00:12.156-07:00Inspect and Adapt<div class="separator" style="clear: both; text-align: center;"></div><br />
<div class="separator" style="clear: both; text-align: center;"></div><div style="background-color: transparent; margin-left: 1em; margin-right: 1em;"><div id="internal-source-marker_0.03856945829465985" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“SCRUM assumes that the systems development process is an unpredictable, complicated process that can only be roughly described as an overall progression.”</span></div><div style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: center;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-Ken Schwaber, </span><a href="https://wiki.state.ma.us/confluence/download/attachments/16842777/Scrum+Development+Process.pdf"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Scrum Development Process</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, 1995</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">One of the things that I like about Scrum is that its creators defined it knowing that no development process is perfect. The Scrum Guide does not tell us how to build software, rather, it openly acknowledges that building software is complicated and unpredictable. This may seem odd, with Scrum being thought of as a development process (it’s not). In a recent </span><a href="http://groups.yahoo.com/group/scrumdevelopment/message/51336"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">post </span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">to the Yahoo! Scrum Development group, Ken Schwaber stated that “</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">we purposefully constructed Scrum with a lot of holes in which a person or team or organization has to continually figure out the best thing to do.</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">”</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">So how does a Scrum team “continually figure out” how to do the best thing? To facilitate iterative and ongoing improvement, Scrum specifies that each Scrum Team hold a </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sprint Retrospectives</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. Further, these retrospectives must happen frequently, occurring immediately following each Sprint Review. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">It is often overlooked when starting out with Scrum, but I believe the Sprint Retrospective is the most important meetings a Scrum team participates in. While the Sprint Review is a valuable “public” meeting where working product is demonstrated to stakeholders and customers, the Sprint Retrospective is a “private” team meeting, allowing the team to safely discuss what’s working and want could be improved with regards to how they are delivering their work. In the Sprint Retrospective, anything that relates to how the team operates can be discussed and possibly tuned or improved. Up for debate could be how the team communicates, technology issues, <a href="http://agilemakingprogress.blogspot.com/2011/01/what-does-done-mean.html">done-ness criteria</a>, or even choice of tools, as was recently discussed for one of our new Scrum teams in my organization (They reverted back to whiteboard task charts and spreadsheet burndown charts!).</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">What this ultimately means is that each Scrum team is evaluating, refining, and improving how they work together and build software every 2 to 4 weeks. Almost continuously improving throughout the life of the project! Over a 12 month project there can be upwards of 24 opportunities to “do things better” and improve how the software is built and delivered. Compare that to our our Waterfall-like development model where we generally conduct formal retrospectives twice, once after Beta and once after we release. In our current model, we, at best, have one predefined opportunity to improve our practices during the release, at Beta when there is usually no more than 3-4 months of (QA and bug fixing time) time remaining before the software is released. Process improvement is clearly not highly integrated into our Waterfall process.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">With frequent inspection and adaptation we can become more efficient at building and delivering high quality software that meets or even exceeds customer expectation. So my advice is: take full advantage of your Sprint Retrospectives. As a Scrum team member, it’s your (frequent!) opportunity to make a difference...</span></div><div style="background-color: transparent; margin-left: 1em; margin-right: 1em;"></div><div style="background-color: transparent; margin-left: 1em; margin-right: 1em;"><br />
<div style="text-align: center;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 18pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="400" src="https://lh4.googleusercontent.com/X4Bwne-6Bg8tLqJvRetX69C-o9azHxwDQmCtIICV64KPqC7DZroks6rf3vGPBVySDtNsuRikYJXqJA58In7QJbUnRQcE7nRn6WWruHGRJPK9EQwOOec" width="309" /></div><div style="margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt; text-align: center;"><span style="background-color: transparent; color: #333333; font-family: Verdana; font-size: 9pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">kaizen </span><span style="background-color: transparent; color: #333333; font-family: Verdana; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> (kaɪˈzɛn) - </span><span style="background-color: transparent; color: #333333; font-family: Verdana; font-size: 9pt; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">n</span><span style="background-color: transparent; color: #333333; font-family: Verdana; font-size: 9pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: transparent; color: #333333; font-family: Verdana; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> a philosophy of continuous improvement </span></div><div style="margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt; text-align: center;"><span style="background-color: transparent; color: #333333; font-family: Verdana; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">of working practices that underlies total quality management </span></div><div style="margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt; text-align: center;"><span style="background-color: transparent; color: #333333; font-family: Verdana; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">and just-in-time business techniques <span style="font-size: xx-small;">[</span></span><span style="font-size: xx-small;"><a href="http://dictionary.reference.com/browse/Kaizen+"><span style="background-color: transparent; color: #000099; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Dictionary.com</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">]</span></span></div><div style="margin-bottom: 0pt; margin-left: 72pt; margin-top: 0pt;"><br />
</div><span style="background-color: transparent; color: black; font-family: Verdana; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></div><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"></span>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-6007124903092260492011-05-25T09:45:00.000-07:002011-05-25T09:45:28.151-07:00Cycling and Scrum<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div style="background-color: transparent;"><span id="internal-source-marker_0.2695677268784493" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Every year I join a group of friends and ride a 100K <a href="http://bikemam.nationalmssociety.org/site/TR/Bike/MAMBikeEvents?fr_id=17323&pg=entry">charity bike ride</a>. This ride takes about 4 hours and has turned into a fun yearly tradition. This year, as I was battling my way up the hills of Chilmark (the ride covers most of Martha’s Vineyard), it occurred to me that there were a lot of similarities between the cycle ride I was a part of, and a Scrum team.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Some of the similarities I came up with were as follows:</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<ul><li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Once you know the basics, you can ride a bike a long distance, or participate on a Scrum team. However, having solid training for each makes doing them much easier and more efficient.</span></li>
</ul><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<ul><li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Developing a regular cadence is valued in both Scrum and cycling. Going to hard and fast early on can quickly burn you out, making it hard to finish the job.</span></li>
</ul><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<ul><li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Buying a Scrum tool doesn’t make you a better Agile organization, just like buying a new carbon-fiber bike doesn’t make you a better, faster rider.</span></li>
</ul><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<ul><li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">I’m a long distance runner, and not a great cycler. However, riding with my friends, many of whom are serious cyclers, makes me a better rider. As the ride progressed, I rode smoother, tighter and faster. Working on a Scrum team has a similar effect for team members. Knowledge readily spreads to the teammates through frequent communication via daily stand-ups and backlog grooming activities, making them stronger, better engineers.</span></li>
</ul><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<ul><li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Due to the fact that the ride occurs mid-Spring, each member of the team arrives with a different level of fitness, depending on how much training we put in on indoor trainers during the long New England winter. As such those of us less capable rely on help from the stronger riders. With cycling, teamwork is core to the effort. Riders work together, take turns leading the group, breaking the wind for the rest of the team, pulling the group, allowing others (slower, tired riders!) to draft behind them. Similarly, Scrum is focused on teamwork and less about solo achievements. Sprints (and thus product releases) can only efficiently succeed if the team works together and arrives at the end together.</span></li>
</ul><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<ul><li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">There was a strong team commitment to finish the full 100K. During the ride there were several opportunities during the ride to cut it short - to quit early. Additionally, the event offers 2 shorter rides, of 10 and 30 miles. But we, as a team, committed to completing the 100K ride regardless of the weather or any other adversity that came our way. Scrum teams develop a similar strong focus and commitment to delivering potentially shippable product increments and overcoming impediments.</span></li>
</ul><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">My friends and I had great weather and a fun ride. We reached the 100K mark, the “finish line” together with a team velocity of 17 [mph] story points. I’m looking forward to next year’s ride.</span></div><div style="background-color: transparent;"><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="298" src="https://lh3.googleusercontent.com/65HICbOOSST_oHqpSAFEfKSxFY-reegMr9J5gS8I2QaQ-jcu5K1pjZpJYWT2kABYVCuKomCeOPP5mgogtGedaD1tVbbfSQDluyr5UyNCoakScs06u-Y" width="400" /></div></span>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-45111299036205323642011-05-11T05:42:00.000-07:002011-05-11T05:42:00.539-07:00"Scrum is Like Chess"<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div style="background-color: transparent;"><span id="internal-source-marker_0.664984640898183" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">One of my favorite Scrum quotes is “</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Scrum is like chess.</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">” </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Like chess, the “rules” for Scrum are fairly straight forward. But also like chess, Scrum practitioners require continued practice and ongoing learning to be come good.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="266" src="https://lh3.googleusercontent.com/aNt4QCi4MD9_Q26UUYN3bTaUcakLIvrGOJqFCGPLGv8dns1ggM8uO8oN4aOe44K2z2bZwz5H3_BmLlZRp44clYyAHl8_3I8J3G_sNdfiUVuzVREpTUg" width="400" /><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">So why do it? If it is hard to master, why change our development process?</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Ken Schwaber, a co-author of the </span><a href="http://www.scrum.org/scrumguides/"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Scrum Guide</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, sums it up best: “</span><span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Those who play both games and keep practicing may become very good at playing the games. In the case of chess, they may become Grand Masters. In the case of Scrum, they may become outstanding development organizations, cherished by their customers, loved by their users, and feared by their competitors</span><span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.”</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Being loved by users and feared by competitors would mean that we’re delivering highly desired software products which are generating significant sales growth and, ultimately, more corporate value. This is the state we, as a company, want to achieve, and it is one of the drivers for our transition from Waterfall to Agile.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">So what can you do to become better at Scrum? </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Being part of a Scrum team and new to Scrum, you are likely devoted near-full time on learning new ways of working as well as actually delivering <a href="http://agilemakingprogress.blogspot.com/2011/03/ship-it-scrums-potentially-shippable.html">potentially shippable product </a>every Sprint. But this shouldn’t stop you from allocating some time to digging further into the nuances of Agile software development practices, communication and organizational behavior.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">There’s a wealth of information, as well as tons of opinions from many of the great Agile industry experts, on two public Internet groups. The first, and older, is the Yahoo! Group, </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Scrum Development</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><a href="about:blank"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">(http://groups.yahoo.com/group/scrumdevelopment/)</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. The second, a Google Group called </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Agile Leaders</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> (</span><a href="http://groups.google.com/group/agile-leaders?pli=1"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://groups.google.com/group/agile-leaders?pli=1</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">) was recently created and also features some lively discussions, often by the same cross-section of folks on the Scrum Development list. By just becoming an observer to these lists you can glean many useful tidbits of information on all aspects of Scrum as well as Agile software development. While these are great resources for every Scrum team member, aspiring ScrumMasters and Product Owners should take particular note of these two valuable resources.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">There’s also numerous blogs and webinars that can give you insight to different facets of Scrum. I’d start there before buying too many books (Amazon lists over 300 books for “Scrum” and over 1300 for “Agile”). There are many formal and informal Agile and Scrum gatherings, such as Agile New England (</span><a href="http://www.agilenewengland.org/"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://www.agilenewengland.org</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">) that regularly host events and meet ups. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">And finally, as with any discipline, nothing beats practice coupled with an ongoing desire to learn.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Enjoy the journey!</span></div></span>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-34950140830214164492011-04-27T05:53:00.000-07:002011-04-27T05:53:00.765-07:00Multi-tasking Mayhem<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div style="background-color: transparent;"><div id="internal-source-marker_0.3456623547244817" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">One of Scrum’s rules pertains to the purpose of each Sprint, which is to deliver increments of potentially shippable functionality that adheres to a working definition of “done.”</span></div><div style="margin-bottom: 0pt; margin-left: 180pt; margin-top: 0pt;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 8pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Scrum Guide: </span><a href="http://www.scrum.org/scrumguideenglish/"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://www.scrum.org/scrumguideenglish/</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">A few weeks ago I was part of a small team creating an Agile training course for our Product Group. The one-week time-boxed effort was broken into 5 one-day Sprints - we were going to </span><a href="http://en.wikipedia.org/wiki/Eating_your_own_dog_food"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">eat our own dogfood</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> and create the course using the Scrum framework. For our second Sprint, day 2, I volunteered to implement a couple fairly involved stories from our backlog, each requiring me to create a dozen or so slides with associated training notes. A accomplished multitasker, I dove into the effort, working on both stories concurrently. Late afternoon I suddenly found myself in the final hour of the Sprint with both stories more than half complete, but neither story <a href="http://agilemakingprogress.blogspot.com/2011/01/what-does-done-mean.html">Done</a>! A bit of panic set in as I contemplated my mistake: if I had worked on the deliverables sequentially, I’d have easily completed at least one Story, come Sprint review time. As it stood then, I might not have anything done. I felt momentarily paralyzed by my situation and realized that I’d have to put in extra effort to get the work done in time. I also realized I had a great topic for my next blog, so all was not lost!</span></div><div style="background-color: transparent;"><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="338px;" src="https://lh5.googleusercontent.com/IN-QjYbrNhCgLR15u4ijrwTzOz3BXw7rHzo7l_UuJw1pGQ_dwLKIxZGyvg800IgLHuBHheR6V4vkwKzz7XQSWz_0QEU286mVfAt6ADdGmJ6uIoCuWjw" width="281px;" /><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">The ability to multitask is often viewed in the workplace as a positive skill: the ability to juggle and deliver multiple competing priorities in an increasingly complex and dynamic business environment. However, numerous studies have shown that multitasking only gives the illusion of enhanced productivity, when in actual fact, working on more than one task at the same time often results in </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">less </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">actual productivity! According to </span><a href="http://www.psychologytoday.com/articles/200303/the-difficulties-multi-tasking"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Psychology Today</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> “the mind slows down when it switches back and forth between tasks”. Each time you switch to a new task you must gain context on the new task while losing some context on the task you left behind. A </span><a href="http://news.stanford.edu/news/2009/august24/multitask-research-study-082409.html?cmpid=knowledgebase&edition=09-sept"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Stanford study </span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">suggests that when you are switching between multiple tasks, you “</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">couldn't help thinking about the task [you] weren't doing</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">”, leading to a further drop in productivity.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">My take-away from this is two-fold:</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<ol><li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Teams (and individuals) should work on one story/task at a time and deliver on stories sequentially. The prioritized Product Backlog and Sprint Backlog should is the artifact that focuses the Team.</span></li>
</ol><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<ol start="2"><li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Management should respect the Team commitment (of course!), keep team members 100% dedicated to the Sprint and do whatever necessary to eliminate competing priorities. When competing work is discovered, the work should be added to the Product Backlog and prioritized by the Product Owner.</span></li>
</ol><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Focusing one one story and completing that work before moving on to the next, Scrum teams (as well as individuals) will deliver more work. Sometimes you have to go “slow” to go fast.</span></div></span>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-11990543763522705242011-04-13T05:07:00.000-07:002011-04-13T05:07:00.610-07:00Velocity and Release Planning<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div style="background-color: transparent;"><div id="internal-source-marker_0.946701180189848" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br class="Apple-interchange-newline" />“An iterative, story-driven process makes it easy to fix a date but difficult to fix what will be included by a given date.”</span></div><div style="text-align: center;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"></span><span class="Apple-tab-span" style="white-space: pre;"></span><span class="Apple-tab-span" style="white-space: pre;"></span></span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-Mike Cohn, </span><a href="http://www.amazon.com/User-Stories-Applied-Software-Development/dp/0321205685/ref=sr_1_1?ie=UTF8&s=books&qid=1300823867&sr=8-1"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">User Stories Applied</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Predicting a release date is often a big challenge in software development, particularly Waterfall-type development projects. Actually, making the prediction is the easy part - predicting accurately is the challenge. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Assuming a team is in place, determining when a software project will be released is a function of time, features, and quality. Further, by fixing any one of those variables, you can can expect to, perhaps greatly, impact the other two. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">As my organization transitions from Waterfall to Agile, we’re challenged with how to accurately perform Agile product release planning and reflect that back to the wider (non-development) organization. With the “old way of doing things” there is a general comfort with holding a written plan, a project schedule, even if everyone knows that plan has a high probability of being wrong.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Waterfall Release Planning</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">In today’s hyper-competitive business world, a product release date is often defined by company management. This is true in both Agile and Waterfall development environments. In my experience, it’s been true for most, if not all, of the large waterfall development project that I have been a part of the past 25 years.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Once a release date has been set and communicated to the field, the development team heroically tries to meet that date. If you are a lucky engineer, your management team gives you some time to flesh out requirements, create a architecture and design documents, define tasks and a schedule, and ultimately allow your data to influence the release schedule. Even with that luxury, challenges abound to meet this “defined up front” schedule: as you implement more, you learn more, the work remaining becomes more defined, ultimately impacting the project release date - often it is later than originally predicted, rarely is it earlier. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">When faced with more work remaining than time allowed, a hard delivery date often forces you to cut features to meet the schedule. The problem is that features may be partially implemented (waste) and often most of the remaining work is quality assurance testing. In those situations, the choice becomes tougher: slip the schedule or reduce testing (and thus quality). It turns into a </span><a href="http://en.wikipedia.org/wiki/Kobayashi_Maru"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Kobayashi Maru </span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(“no win”, for those who aren’t Star Trek fans) situation. We’ve all been there, and we all bear the battle scars. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Release planning is different with Scrum</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">With a Scrum Team producing potentially shippable code with every Sprint iteration, we’ve essentially fixed one of the release planning variables: quality. In order for a product to be </span><a href="http://agilemakingprogress.blogspot.com/2011/03/ship-it-scrums-potentially-shippable.html"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">potentially shippable</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, it must have a level of customer-expected quality. This leaves the organization two remaining adjustable dials: time and features. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="242" src="https://lh6.googleusercontent.com/a-Xfx-iCwmC4ulbtdbubq2RAsKoSO3NbnghGAL7okTkKmhXTBfEQySNu2fRj4fKrWcSS4ZURIdOiTvrErP24FA7Qghyt1_MuBc-MwtXRr6if9yI1cXQ" width="400" /><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">The amount of completed work (user stories “<a href="http://agilemakingprogress.blogspot.com/2011/01/what-does-done-mean.html">done</a>”) a Scrum team can deliver in a given iteration is identified as the team’s Velocity. Velocity is a key metric for release planning - it quantifies the capacity of the team for a Sprint. Knowing a team’s velocity, coupled with a sized Product Backlog, the Product Owner can get an approximate idea of what features will be delivered by a specific time. [You can reference numerous books and blogs for further details about story sizing and velocity, with Mike Cohn’s </span><a href="http://www.amazon.com/User-Stories-Applied-Software-Development/dp/0321205685/ref=sr_1_1?ie=UTF8&s=books&qid=1300823867&sr=8-1"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">User Stories Applied</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, and </span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><a href="http://www.amazon.com/Agile-Estimating-Planning-Mike-Cohn/dp/0131479415/ref=sr_1_1?ie=UTF8&s=books&qid=1301079936&sr=8-1"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Agile Estimating and Planning</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> being two of the more highly regarded references.]</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Time-based Release Planning</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">If you’re organization is going to mandate a release date, you must readily accept that you won’t initially know the full feature set that will be delivered on that date. But, by using the Scrum Team’s velocity, you can get an approximate idea of the feature set. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Knowing a team’s velocity, how much work a team can get “<a href="http://agilemakingprogress.blogspot.com/2011/01/what-does-done-mean.html">done</a>” in a Sprint, will help predict how much of product backlog can be implemented by the time the mandated product release date arrives. By using the team’s velocity, the number of sprints that can be completed before the release date can be computed (remember, Sprints are of fixed time). Applying that to the backlog can give you a very good idea of what features will make the release and what are on the “bubble”. Usually this is better than good enough. Features that are on the delivery bubble, those that may or may not make the release, are much lower in priority than those that will be fully “done” prior to the release date. These backlog items shouldn’t be make or break features, and can be saved for a subsequent release.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">When the surrounding corporate environment is not Agile and you need to publish a future product feature list to a wider audience, the majority of the the features on the Backlog that comfortably fit into the velocity capacity can be communicated outward, setting expectations and enabling the coordination of public release-type activities such as PR, marketing, etc.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Feature-based Release Planning</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">If you product must complete a specific set of features before you can release, then using team Velocity can help you predict your release date. By using the team’s velocity, and mapping it to the product backlog, you can predict many sprints it will take to complete the required backlog items. Release <a href="http://agilemakingprogress.blogspot.com/2011/01/burn-down-chart-picture-is-worth.html">burndown charts </a>are great at visualizing how much work is remaining in a release and identifying how many sprints are likely required before you can ship the product.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Because the team velocity can vary from sprint to sprint a firmed up average, team velocity usually isn’t firmed up until the team achieves a regular Sprint cadence - usually 3 or so sprints. To determine a release date early on, you will need to consider velocity variability. Mapping out a release date window can be computed by using the predicted best velocity and predicted worse velocity, which will give you a release window as your target release date. As more sprints are delivered, this release window can be refined. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Product Backlog Considerations</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">The Product Backlog is a living entity. As you learn more about your customer needs, and hopefully get customer feedback on early sprints, you likely will add and remove items as well as re-prioritize items, all of which can effect your release date. Additionally, the team velocity likely will fluctuate - but with short (2-4 week) sprints, you will have your finger on the pulse, having up-to-date velocity measures as well as average and historical values. Using this data, you can frequently map out how many sprints will be required to deliver true product value to the market.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="312px;" src="https://lh4.googleusercontent.com/w8Gij6k0TbRDB_WxHTMhieB55aAXOXq9urKLDs4jzbcav91WDfBzirCms0tPjFjwQHXsfn9XH3sEpFvgngNMoEr0wyF_C426OWDIPpjAFAPutGa3-BU" width="417px;" /><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Continuous Planning</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Release planning within Scrum doesn’t happen just once, at the beginning of the release, as it does with waterfall development. The release plan is evaluated and possibly adjusted at the end of every iteration, as more is known and team velocity is refined. Realize that it may not be the project release date that is adjusted, rather it could be the work that will be delivered. As more </span><a href="http://agilemakingprogress.blogspot.com/2011/03/ship-it-scrums-potentially-shippable.html"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">potentially shippable product increments</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> are delivered by the team, the organization has the opportunity to gather customer feedback, and use that feedback to influence (to add or remove items from) the product backlog. Doing so may change your release date, or the features ultimately delivered. Further, performing this activity regularly, doing frequent customer validation and backlog/release grooming, gives the organization the opportunity to deliver a product that better matches market needs.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">For my organization, Scrum has given us a higher level of confidence with our release planning. This year we’re part of a new corporate initiative requires that requires product by the end of 2011. After the recent success of our Scrum pilots, we have a new found confidence in our planning such that we believe we’ll be able to deliver working shippable product by that deadline by using Scrum. We can’t currently say what the complete functionality set will be with absolute certainty, however, but that’s okay. We know we’ll deliver shippable product by the end of the year.</span></div></span>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0tag:blogger.com,1999:blog-2576341788609120403.post-31770552284964317122011-03-31T05:38:00.000-07:002011-03-31T05:38:00.656-07:00Transparency: Keep it visible!<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div style="background-color: transparent;"><div id="internal-source-marker_0.6885600900277495" style="margin-bottom: 0pt; margin-top: 0pt; text-indent: 36pt;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Openness is required for Scrum to work.</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">”</span></div><div style="text-align: center;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"></span><span class="Apple-tab-span" style="white-space: pre;"></span><span class="Apple-tab-span" style="white-space: pre;"></span></span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-Ken Schwaber, Agile Software Development with Scrum</span></div><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Openness, transparency, visibility - no matter what synonym you use, it is critical to Scrum. My favorite term is </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">transparency</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">: Scrum’s openness makes everything that is going on within the project transparent to the world. With Scrum there are no hidden priorities, no hidden work, everyone should (and generally does) know what is currently being worked on and what will be delivered by the team. </span><img height="141" src="https://lh5.googleusercontent.com/vykKVYNpBzyCqoyAeXlITlJuSWJz-7B58F_-nfg7jLzoTgT1ENON09YAtetpeLO9-9wTmc0yWTWGDk31Uv821IPNuL8S_ZtP_-cfMjxys9v6tS_iOH4" width="400" /><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">On the surface, it may seem that transparency is more important for management and the business owners rather than the team. Management primarily cares about when we can actually ship and start selling a product (and of course, that the product does what it needs to do - that it meets market expectations). Numerous business-related activities such as marketing, support, training, etc, are coordinated around a product release. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">But transparency is also extremely important for the team and individuals. Nowhere is this more apparent than in a Waterfall development environment. There have been several instances in my career where a peer has asked me for workplace advice. The conversation zeros in on a boss who is giving them grief about their productivity. After listening to them vent, a common thread usually appears: these individuals often are doing a lot of work, usually juggling many different activities, but their manager is only tangentially aware of the scope of responsibilities this person is shouldering. The manager is not aware of their employee’s “backlog”. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">My advice in these situations is simple: make a list of work you are doing, order it according to priority, and discuss the list with your manager. In particular, I suggest that they work with their manager to help set the right priority of the various work items. This conversation often opens the eyes of both the manager and the employee, quickly addressing the tension and frustration experienced by both parties.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">With Scrum, this communication activity is commonplace. In fact it is core to the Scrum framework: the prioritized product backlog and the Sprint backlog are visible to everyone. As a result, the work being done by the team is obvious and very transparent. Further, project progress is demonstrated to the business owners regularly during the Sprint Review, via a (potentially shippable!) working code demonstration.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">The Inevitable New Unplanned “Top Priority” Work</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">In a Waterfall environment, the impact of new, mid-project “high priority” work is often not immediately felt. Because the product release can be many months away, incoming hot issues can be dealt with in a timely manner and everyone feels good, at least in the short-term. However, this new work causes the team to accrue a form of “schedule debt”. The painful balance comes due at some point in the future, usually in the form of a schedule slip. And often, sadly, that schedule slip is a surprise to management.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">In a Scrum environment, transparency is the proverbial </span><a href="http://en.wikipedia.org/wiki/Big_Stick_ideology"><span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Big Stick</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> when unplanned “critical” work is added to the project. When management (let’s face it, it usually is management) adds new new work to the team’s plate, the impact to the team is immediately obvious: 1) the new work will either displace existing Sprint priorities causing the Sprint to be abnormally terminated, something everyone wants to avoid, or 2) the work will be added to the Product Backlog and prioritized according to business value. There’s no magic, no silver bullet, and everyone Scrum-enabled, </span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;">will</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> should understand that!</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;">Surprise!</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">In software development, we don’t like surprises - we like predicable. Usually a surprise means new unplanned work for the team or a schedule slip. Someone is is going to be unhappy! </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Scrum’s transparency helps organizations eliminate surprises or at a minimum deal with them effectively. Surprises in the form of schedule slips are eliminated because what the team is working on is very visible and demonstrated at the end of every Sprint. Work, delivered via Sprints, is time-boxed and ends up being very predictable. Surprises in the form of new, unplanned work is dealt with effectively by adding it to the prioritized Product Backlog. With a prioritizing Backlog, the team is always working on top business value items. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Transparency, via a published, readily viewable backlogs allows everyone to understand what is currently being worked on as well as the impact of new unplanned work. </span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></div></span><br />
<div style="text-align: center;"><div style="text-align: center;"><span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div style="background-color: transparent;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Scrum keeps everything about a project visible to everyone.</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">”</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div><div style="background-color: transparent;"><span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-tab-span" style="white-space: pre;"></span><span class="Apple-tab-span" style="white-space: pre;"></span><span class="Apple-tab-span" style="white-space: pre;"></span>-</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 8pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Ken Schwaber, Agile Software Development with Scrum</span></div></span></div><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"></span></div>John Piekoshttp://www.blogger.com/profile/11581005852757207691noreply@blogger.com0