site stats

Video: How OpenStack doomed itself

<!–Video: How OpenStack doomed itself Videos about tech that demand to be seen</p> </p></div> </p></div> </header> <section class="epo" id="drr-top-ad"><!-- Related --></p> </section> <figure class="hero-img"><img src="" alt="Video: How OpenStack doomed itself" /><figcaption> <p> Credit:<span></p> <p> John Atherton</p> <p> </span></p> </figcaption></figure> <section class="deck"> <h2>OpenStack has lost its method, and key developer Andy Smith knows the place it took unsuitable turns</h2> </section> <div class="modal eml-friend-wrapper" id="emailModal"> <div class="eml-ty eml-friend-success"> <i class="ss-icon ss-delete" /></p> <h3>Thank You</h3> <p class="msg-sent">Your message has been despatched.</p> </p></div> <div class="eml-friend-error"> <i class="ss-icon ss-delete" /></p> <h3>Sorry</h3> <p class="msg-sent">There was once an error emailing this page.</p> </p></div> </div> <section class="bodee"> <p>$(‘#” + slotName + “‘).responsiveAd(screenSize:’971 1115’, scriptTags: []);”;<br /> var adDivString = “</p> <p>” + adString + “</p> <p>“;</p> <p> placementDiff = applyInsert($(this), adDivString);<br /> if (debug)<br /> console.log(“Simply placed an Ad and the placementDiff is: ” + placementDiff);</p> <p> placementTarget = cumulativeHeight + placementDiff + interModuleHeight + adHeightBuffer;</p> <p> else<br /> var moduleDivString = “”;<br /> var elementId = “drr-mod-“+moduleCounter;<br /> moduleDivString = “”;<br /> modules.push(elementId);</p> <p> placementDiff = applyInsert($(this), moduleDivString);<br /> if (debug)<br /> console.log(“Simply placed a module and the placementDiff is: ” + placementDiff);</p> <p> placementTarget = cumulativeHeight + placementDiff + interModuleHeight + moduleHeightBuffer;<br /> moduleCounter++;</p> <p> loopCounter++;</p> <p> // Steer Clear Of inserting Parts too soon due to non-Huge figures inflating the cumulative Top<br /> if ($(this).is(“Figure”) && !$(this).is(“Determine.Large”))<br /> cumulativeHeight += grafHeight;</p> <p> else<br /> cumulativeHeight += $(this).Top() + grafHeight;</p> <p> );</p> <p> // clone Related Tales module to come in after eighth para in article body for Mobile breakpoint show<br /> var $relatedStories = $(‘.Associated-promo-wrapper’);<br /> if ($relatedStories.length)<br /> var $relatedStoriesClone = $relatedStories.clone();<br /> $relatedStoriesClone.insertAfter( “#drr-container > p:eq(7)”); </p> <p> // For Cell most effective, Situation Advert after 2nd paragraph.<br /> if (firstMobileAdHtml)<br /> $(firstMobileAdHtml).insertAfter(“#drr-container > p:eq(1)”);</p> <p> var $insiderPromo = $(‘.insider-promo-wrapper’);<br /> if ($insiderPromo.size)<br /> var $insiderPromoClone = $insiderPromo.clone();<br /> $insiderPromoClone.insertAfter( “#drr-container > p:eq(1)”);</p> <p> //Place left aspect Element<br /> cumulativeHeight = Zero;<br /> var leftPlacementTarget = tagHeight = leftPlacementTarget)<br /> if (debug)<br /> console.log(“congratulations… we have passed the preliminary Start level”);</p> <p> if (leftPlacementIndex == null)<br /> //It Can Be No Longer just right enough to Now Not be a left Keep Away From – it also will not be a </p> <p> with an immediately previous small or medium image left Avoid.<br /> if (!isLeftAvoid($(this)) && noPrevFigures($(this)) )<br /> leftPlacementIndex = $(this).index();<br /> $leftPlacementElement = $(this);<br /> leftPlacementLookaheadStart = cumulativeHeight;<br /> if (debug)<br /> console.log(“shouldn’t be a left Keep Away From and no prev figures. ########## set placementIndex (“+leftPlacementIndex+”) and lookaheadStart (“+leftPlacementLookaheadStart+”) ##########”);</p> <p> else<br /> if (debug)<br /> console.log(“is a left Keep Away From or has previous figures. continue”);</p> <p> else<br /> if (debug)<br /> console.log(“#### leftPlacementIndex already set to “+leftPlacementIndex+”. looking IN ADVANCE…”);</p> <p> //Not null; has been set<br /> if ((cumulativeHeight – leftPlacementLookaheadStart) > leftIntervalHeight)<br /> if (debug)<br /> console.log(“###### THRESHOLD REACHED. LOOKAHEAD COMPLETE. End ###### (cumulativeHeight – leftPlacementLookaheadStart) (“+(cumulativeHeight-leftPlacementLookaheadStart)+”) > leftIntervalHeight (“+leftIntervalHeight+”).”);</p> <p> return false;<br /> else<br /> if (debug) $(this).hasClass(‘medium’)<br /> );</p> <p> if (leftPlacementIndex != null && elementNotNearEnd($leftPlacementElement, leftPixelWindow))<br /> if (debug)<br /> console.log(” insert into index “+leftPlacementIndex);</p> <p> $(“#drr-container”).youngsters().eq(leftPlacementIndex).ahead of(“</p> <p>“);</p> <p> IDG.GPT.trackOmniture();</p> <p> // Add Right rail module content<br /> for (var i=Zero; i” + adString + “</section> </article> </section> </div> <p>“;</p> <p> operate getEpoParams() </p> <p> /**<br /> * @param jqo Original jquery object Goal<br /> * @param divString The div to be inserted.<br /> * @return Difference in Top between Unique placement Target and ultimate Target.<br /> * Assessments first 6 Elements for an allowable placement (600 pixel window).<br /> * If none, Take A Look At local for Parts that are not Proper avoids.<br /> * If none, Position Component before present Target.<br /> */<br /> operate applyInsert(jqo, divString)<br /> if (debug)<br /> console.log(“applyInsert at top and jqo index is: ” + jqo.index());</p> <p> for (var i=Zero; i 0)<br /> children = $(“#drr-container”).children().slice(jqo.index(), allowElement.index() );</p> <p> else<br /> kids = $(“#drr-container”).kids().slice(allowElement.index(), jqo.index());</p> <p> if (youngsters != null)<br /> youngsters.EVERY(function(i)<br /> if (debug)<br /> console.log(“About to add this Part’s Peak to heigh diff offset”);<br /> console.log($(this));</p> <p> Height += $(this).Top() + grafHeight;<br /> );</p> <p> if (offset 300)<br /> if (debug)<br /> console.log(“isRightAvoid: found pre. return real”);</p> <p> return proper;</p> <p> if (“Determine”) && jqo.hasClass(‘Large’))<br /> if (debug)<br /> console.log(“isRightAvoid: discovered Figure.Massive return true”);</p> <p> return authentic;</p> <p> if (“Determine”) && jqo.hasClass(‘medium’) && jqo.hasClass(‘inline’))<br /> if (debug)<br /> console.log(“isRightAvoid: found Determine has Class medium and inline.”);</p> <p> return true;</p> <p> if (‘div’) && jqo.hasClass(‘Table-wrapper’))<br /> if (debug)<br /> console.log(“isRightAvoid: discovered div with Type Table-wrapper”);</p> <p> return real;</p> <p> if (‘aside’))<br /> if (jqo.hasClass(‘sidebar’) && !jqo.hasClass(‘medium’))<br /> if (debug)<br /> console.log(“isRightAvoid: discovered apart with Type sidebar, with out Classification medium”);</p> <p> return genuine;</p> <p> if (jqo.hasClass(‘statsTable’))<br /> if (debug)<br /> console.log(“isRightAvoid: found apart with Category statsTable”);</p> <p> return true;</p> <p> if (jqo.hasClass(‘obtain-asset’))<br /> if (debug)<br /> console.log(“isRightAvoid: discovered Category obtain-asset return authentic”);</p> <p> return actual;</p> <p> if (jqo.hasClass(‘tableLarge’))<br /> if (debug)<br /> console.log(“isRightAvoid: found Category tableLarge return proper”);</p> <p> return actual;</p> <p> if (jqo.hasClass(‘reject’))<br /> if (debug)<br /> console.log(“isRightAvoid: discovered Type reject. return proper”);</p> <p> return true;</p> <p> if (‘Table’) && jqo.hasClass(‘scorecard’))<br /> if (debug)<br /> console.log(“isRightAvoid: discovered div with Type scorecard”);</p> <p> return real;</p> <p> return false;</p> <p> // Return real if Component has Classification ‘reject’: won’t Situation drr modules/ads subsequent to these Components<br /> perform isRightReject(jqo)<br /> console.log(“in isRightReject”);<br /> if (jqo != null)<br /> if (jqo.hasClass(“reject”))<br /> if (debug)<br /> console.log(“isRightReject: discovered ‘reject’ Category”);</p> <p> return true;</p> <p> return false;</p> <p> return false;</p> <p> // Returns authentic if Height of all Elements after this one is greater than 500; false otherwise<br /> function elementNotNearEnd(Element, pixelWindow)<br /> if (pixelWindow == null)<br /> pixelWindow = 500;</p> <p> if (Component == null)<br /> return false;</p> <p> var remainingHeight = Zero;<br /> var youngsters = $(“#drr-container”).kids().slice(Element.index());<br /> if (kids == null)<br /> return false;</p> <p> kids.EACH(function(i)<br /> remainingHeight += $(this).Height();<br /> );<br /> if ( remainingHeight > pixelWindow)<br /> return real;</p> <p> else<br /> if (debug)<br /> console.log(“Part too with regards to Finish. Ultimate Top is: ” + remainingHeight + ” and window is ” + pixelWindow); </p> <p> return false;</p> <p> /**<br /> * Return proper if want to Avoid this Element when placing left module.<br /> */<br /> function isLeftAvoid(jqo)<br /> if (“Determine”))<br /> if (debug)<br /> console.log(“isLeftAvoid: found Determine. return actual”);</p> <p> return real;</p> <p> if (“aside.pullquote”))<br /> if (debug)<br /> console.log(“isLeftAvoid: found pullquote. return authentic”);</p> <p> return real;</p> <p> if (“pre”))<br /> if (debug)<br /> console.log(“isLeftAvoid: found pre. return actual”);</p> <p> return proper;</p> <p> if (“div.gist”))<br /> if (debug)<br /> console.log(“isLeftAvoid: found github code block. return proper”);</p> <p> return authentic;</p> <p> if (“aside”) && jqo.hasClass(“sidebar”) && jqo.hasClass(“medium”))<br /> if (debug)<br /> console.log(“isLeftAvoid: found medium sidebar. return true”);</p> <p> return authentic;</p> <p> if (jqo.hasClass(“statsTable”))<br /> if (debug)<br /> console.log(“isLeftAvoid: discovered Type statsTable. return real”);</p> <p> return actual;</p> <p> return false;</p> <p> /**<br /> * return actual if there are no figures before the Target placement that might bleed down into placement Element<br /> */<br /> perform noPrevFigures($originalTarget)<br /> var targetIndex = $originalTarget.index();<br /> var numElementsLookBack = 5;<br /> var figureIndex = null;<br /> var figureHeight = null;<br /> var startIndex = targetIndex – numElementsLookBack </p> <div id="drr-container"> <p> OpenStack once held such promise. But in his tackle to ultimate yr’s OpenStack Summit in Vancouver, developer Andy “termie” Smith, who, as he puts it, “helped Start this OpenStack thing,” mentioned that OpenStack is now completed for. His session, proven below and titled “OpenStack Is Doomed and It Can Be all of your Fault,” describes a series of grave missteps. </p> <figure class="large"> <div class="embed-wrapper"> </div> </figure> <p> For starters, OpenStack blew its said mission to be “simple to implement.” Creating and maintaining simplicity is tougher than it appears. Characteristic creep, transient fixes becoming permanent, and indecisiveness all conspired to create problem, confusion, and general kludginess. </p> <p> Then there’s the problem of getting so many stakeholders. When multiple groups, EACH AND EVERY with their very own (incessantly opposing) priorities, claims possession of a codebase, internecine conflict shortly follows — to not mention the traditional “too many cooks within the kitchen” drawback, which contributes closely to the aforementioned Function creep. </p> <p> In Some Way, Smith traces quite a lot of OpenStack’s downside to that root of all evil: money, although Now Not in a pie-in-the-sky “the whole lot must be free” manner. OpenStack made up our minds that bringing Large firms on board would give it extra visibility — which it did. However of course, doing so also introduces company keep an eye on to the picture. “OpenStack is not people,” Smith says. “OpenStack is firms.” Therein lies the difficulty. </p> <aside class="nativo-promo smartphone" id="" /></div> <div class="byline vcard author end-byline"> <p><img class="bylineImage imgId100409182 " src="" alt="Pete Babb" /></p> <div class="author-info with-image"> <p class="author-name"> Pete Babb — <span class="author-title">Affiliate Editor</span></p> <p class="bio">Pete Babb is an Associate editor at InfoWorld.</p> </p></div> <p><!-- end .author-info --></p> </div> <p><!-- blx4 #1218 blox4.html --></p> <div class="article-intercept"> <a href=""><br /> <i class="ss-icon ss-navigateright" /><em> From CIO:</em> Eight Free On-line Lessons to Develop Your Tech Abilities<br /> </a></p> </div> <p> <!-- /.bodee --></p> <section id="funnel"> <section class="popular-brand-cols"> <section class="popular-col"><!-- /.promo --><br /> <!-- ./promo newsletter --></p> </section> <section class="brand-col"> </section> </section> <section class="featured-col"><!-- blx4 #937 blox4.simple --></p> </section> </section> <p> <!-- /role=main --><!-- /#page-wrapper --></p> <footer> <section class="brand"><span class="logo">InfoWorld</span><br /> <span class="tagline"> </span></p> <p> <span class="follow"><br /> <label>Apply us</label><br /> </span></p> </section> <section class="topics"> <nav id="ft1" /> <nav id="ft2" /></section> <section class="about"> </section> <section class="copyright"> <div class="wrapper"> <p>Copyright © 1994 – 2016 InfoWorld, Inc. All rights reserved.</p> <div class="network"> <div id="network-selector"> <p>Discover the IDG Network <i class="ss-icon tick">descend</i></p> </p></div> <p><!-- /#network-selector --> </div> <p><!-- /.network --> </div> <p><!-- /.wrapper --><br /> </section> </footer> <p><!-- Begin welcome ad overlay - gpt-overlay position --><br /> <!-- End welcome ad overlay - gpt-overlay position --></p> <p> <!-- Begin gpt-skin/gpt-pin/inread --></p> <p> <!-- End gpt-skin/gpt-pin/inread --> </p> <p><!-- Begin BlueKai Tag --></p> <p><!-- CryptoJS --></p> <p><!-- End BlueKai Tag --></p> <p><!-- BEGIN Krux Control Tag for InfoWorld --></p> <p><!-- END Krux Controltag --></p> <p><!-- START Nielsen Online SiteCensus? V6.0 --><br /> <!-- COPYRIGHT 2010 Nielsen Online --></p> <p><!-- END Nielsen Online SiteCensus? V6.0 --></p> <p><!-- SiteCatalyst code version: H.26.2. Copyright 1996-2013 Adobe, Inc. All Rights Reserved More info available at --></p> <p><img src="" height="1" width="1" border="0" alt="" /><!--/DO NOT REMOVE/--><br /> <!-- End SiteCatalyst code version: H.26.2. --></p></div> <p><br /> <br /><a href="">Supply link </a></p> <div class="clear"></div> </div><!-- /entry --> <div id="comments"> <p> You must be logged in to post a comment <a href=""> Login </a> </p> </div><!-- #comments --> </div><!-- /main --> <div id="sidebar"> <div class="sidebarinner"> </div><!-- .sidebarinner --> </div><!-- /sidebar --> </div><!-- /container --></div><!-- end of wrapper --> <div id="footer"> <div id="foo_widget1"> <div id="flickr-widget-3" class="widget flickr_widget"><div class="widgetinner"><h3 class="widgettitle">Flickr Photo Stream</h3> <script type="text/javascript" src=""></script><div class="clear"></div></div></div> </div> <div id="foo_widget2"> <div id="recent-posts-3" class="widget widget_recent_entries"><div class="widgetinner"> <h3 class="widgettitle">Recent Posts</h3> <ul> <li> <a href="">Goodell surprises terminally ill NY volunteer firefighter with Super Bowl tickets</a> </li> <li> <a href="">Pennsylvania Dem linked to gambling ring awaits sentencing</a> </li> <li> <a href="">Thornton Heath kidnap: Arrests made over 50-hour ordeal</a> </li> <li> <a href="">The Latest: Dry winds to persist in California fire areas</a> </li> <li> <a href="">A Voice for the Sport: The 10 Most Impactful People of 2017</a> </li> </ul> </div></div> </div> </div> <div id="footer_data"> <ul class="footerpages"> <li class="first"><a href="" title="Great Today News">Home</a></li> <li class="page_item page-item-6"><a href="">Privacy Policy</a></li> <li class="page_item page-item-195"><a href="">Contact Us</a></li> <li class="page_item page-item-198"><a href="">Video Gallery</a></li> <li class="page_item page-item-201"><a href="">Sitemap</a></li> <li><a rel="nofollow" href="">RSS</a></li> <li class="right"><a href="#top" title="Great Today News" rel="home"><strong>↑</strong> Great Today News</a></li> </ul> <div class="clear"></div> <p id="footer-left-side"> <a href="" title="Great Today News" rel="home">Great Today News</a> </p><!-- #site-info --> <p id="footer-right-side"> <a href="">Log in</a> - Designed by <a href="" title="Today News">Today News</a> <script type='text/javascript' src=''></script> <script type='text/javascript'> /* <![CDATA[ */ var wpcf7 = {"apiSettings":{"root":"http:\/\/\/wp-json\/contact-form-7\/v1","namespace":"contact-form-7\/v1"},"recaptcha":{"messages":{"empty":"Please verify that you are not a robot."}},"cached":"1"}; /* ]]> */ </script> <script type='text/javascript' src=''></script> <script type='text/javascript' src=''></script> </p> <!-- #footer-right-side --> </div><!-- /footer_data --> <div class="hide"> <div id="adv_here"> <h3 class="widgettitle">Widgetized Section</h3> <p>Go to Admin » appearance » Widgets » and move a widget into Advertise Widget Zone</p> </div> </div> <!-- Quantcast Tag --> <script type="text/javascript"> var _qevents = _qevents || []; (function() { var elem = document.createElement('script'); elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ""; elem.async = true; elem.type = "text/javascript"; var scpt = document.getElementsByTagName('script')[0]; scpt.parentNode.insertBefore(elem, scpt); })(); _qevents.push({ qacct:"p-XSTdT3wyH_FGD" }); </script> <noscript> <div style="display:none;"> <img src="//" border="0" height="1" width="1" alt="Quantcast"/> </div> </noscript> <!-- End Quantcast tag --> </body> </html> <!-- Performance optimized by W3 Total Cache. Learn more: Page Caching using disk: enhanced Served from: @ 2017-12-11 02:11:30 by W3 Total Cache -->