<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8968606496450201033</id><updated>2026-05-08T04:16:45.080-04:00</updated><category term="qcon"/><category term="wednesday"/><category term="thursday"/><category term="friday"/><category term="keynote"/><category term="topics"/><category term="Cloud"/><category term="change"/><category term="devops"/><category term="mike lee"/><category term="product engineering"/><category term="quality"/><category term="visualization"/><category term="AWS"/><category term="CI"/><category term="DVCS"/><category term="GC"/><category term="Garbage Collector"/><category term="JVM"/><category term="Java"/><category term="Mylyn"/><category term="PaaS"/><category term="Performance tuning"/><category term="WSO2"/><category term="agile manifesto updated"/><category term="architect"/><category term="awesome"/><category term="business"/><category term="continuous delivery"/><category term="dart"/><category term="edge"/><category term="extensions"/><category term="failure"/><category term="failures survival principles"/><category term="final"/><category term="gerrit"/><category term="git"/><category term="google"/><category term="html 5"/><category term="hudkins"/><category term="hudson"/><category term="info"/><category term="jenkins"/><category term="jquery"/><category term="latency"/><category term="lean"/><category term="manufacturing"/><category term="mariachi"/><category term="mothership"/><category term="netflix"/><category term="phonegap"/><category term="platform"/><category term="profiling"/><category term="scalability"/><category term="short"/><category term="social data"/><category term="software product development"/><category term="traveling"/><category term="value"/><category term="value assertions"/><category term="value statement"/><title type='text'>QCon SF 2011</title><subtitle type='html'>This blog will be covering my attendance at the QCon 2011 conference in San Francisco, California from November 16 to 18. QCon is a software development conference on many useful topics which I will try  my best to summarize through my posts. Please, feel free to post your comments and get some conversation started. Enjoy!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-540599295764428549</id><published>2011-12-12T10:38:00.002-05:00</published><updated>2011-12-12T10:39:06.521-05:00</updated><title type='text'>Featured on InfoQ</title><content type='html'>Check out Abel Avram&#39;s &lt;a href=&quot;http://www.infoq.com/articles/QCon-San-Francisco-2011&quot;&gt;Key Takeaway Points and Lessons Learned from QCon San Francisco 2011&lt;/a&gt; article in which articles from this blog&amp;nbsp;are quoted.&lt;br /&gt;
&lt;br /&gt;
That is awesome!</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/540599295764428549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/12/featured-on-infoq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/540599295764428549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/540599295764428549'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/12/featured-on-infoq.html' title='Featured on InfoQ'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-2528632028954075945</id><published>2011-11-18T20:45:00.000-05:00</published><updated>2011-11-18T20:45:10.311-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="final"/><category scheme="http://www.blogger.com/atom/ns#" term="friday"/><category scheme="http://www.blogger.com/atom/ns#" term="mothership"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><title type='text'>Final Impressions from QCon SF 2011</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ533kf0m58q7ApMuyu3-zo4Si9TZyIfL1X5xCg0xAKR8cFrXTXo0f-CGKcXpIt5DFV_Wb6BW2D9E0473ZMf5Ow30_8bHrtZrp195hK_KXCxVodOp3UONfhKnbG7VKLAYuP4g_t61b4TY/s1600/logo_qcon.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;61&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ533kf0m58q7ApMuyu3-zo4Si9TZyIfL1X5xCg0xAKR8cFrXTXo0f-CGKcXpIt5DFV_Wb6BW2D9E0473ZMf5Ow30_8bHrtZrp195hK_KXCxVodOp3UONfhKnbG7VKLAYuP4g_t61b4TY/s200/logo_qcon.gif&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;The past three days have been quite intense and I&#39;m on the verge of a total information overload. All that aside, the &lt;a href=&quot;http://qconsf.com/&quot;&gt;QCon San Francisco&lt;/a&gt; International Software Development Conference was in my eyes a great success. Me and my work colleague came here on an information seeking mission and I can now say with great confidence that we have achieved our goal. In fact, we might have collected enough data to sift through for the next couple of weeks which will then package that in a form that is consumable in our work environment. The discussions and idea exchange will definitely continue for us but at a more local level. Some of the posts on this blog have been updated with new information as it was make available so don&#39;t be shy to re-read some of them. Also, for those would couldn&#39;t make to QCon SF in person, don&#39;t forget to check-out&amp;nbsp;&lt;a href=&quot;http://InfoQ.com/&quot;&gt;InfoQ.com&lt;/a&gt;&amp;nbsp;in the coming weeks for videos of some of the presentations.&lt;br /&gt;
&lt;br /&gt;
A few numbers to put things into perspective, at the moment of the writing of this post, we have a count of over &lt;b&gt;950&lt;/b&gt; page views coming from mostly from North America but also surprisingly from South America (Argentina) and Europe (France, Germany, Austria, United Kingdom, The Netherlands, Belgium and Ireland). I&#39;m guessing the postings on Facebook, Twitter, LinkedIn and Google+ have helped that a little :) These numbers aren&#39;t that impressive by Internet standards but is a personal record for the little blogging that I do,&amp;nbsp;&lt;a href=&quot;http://twitter.com/#!/search/%23win&quot;&gt;#win&lt;/a&gt;!&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;Thanks everyone who took the time to look at our blog and leaving some comments. I hope you enjoyed the re-hashed content pseudo-reporting style of our posts; I, for one, have enjoyed the experience of writing them.&lt;br /&gt;
&lt;br /&gt;
On that note, we have to proceed with a quick extraction of the premises as our flight back home leaves in just a couple of hours. See you back in at the Mothership in Montreal!&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9J_w0ECzkbB1kUFiwXbFx-LnC5Po9aXEEW-e8XZ8eQk6GWjlUiW1cJh3xxuKy-XHR7Ajiatv_FU2BNRrc7HlX4pf7QBfJ4VUU3OWM4quRVVf3fk9l5P1sZrCt8Zev7TyfaIACCUElVW8/s1600/Home+Base.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;298&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9J_w0ECzkbB1kUFiwXbFx-LnC5Po9aXEEW-e8XZ8eQk6GWjlUiW1cJh3xxuKy-XHR7Ajiatv_FU2BNRrc7HlX4pf7QBfJ4VUU3OWM4quRVVf3fk9l5P1sZrCt8Zev7TyfaIACCUElVW8/s400/Home+Base.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The Mothership!&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/2528632028954075945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/final-impressions-from-qcon-sf-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/2528632028954075945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/2528632028954075945'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/final-impressions-from-qcon-sf-2011.html' title='Final Impressions from QCon SF 2011'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ533kf0m58q7ApMuyu3-zo4Si9TZyIfL1X5xCg0xAKR8cFrXTXo0f-CGKcXpIt5DFV_Wb6BW2D9E0473ZMf5Ow30_8bHrtZrp195hK_KXCxVodOp3UONfhKnbG7VKLAYuP4g_t61b4TY/s72-c/logo_qcon.gif" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-6380285688367114727</id><published>2011-11-18T18:00:00.000-05:00</published><updated>2011-12-05T10:52:30.512-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="devops"/><category scheme="http://www.blogger.com/atom/ns#" term="friday"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><title type='text'>DevOps to NoOps - cloud APIs (MuleiON)</title><content type='html'>Presentation content changed to &lt;i&gt;DevOps to NoOps&lt;/i&gt; from &lt;i&gt;Integrating SaaS applications with Mule iON&lt;/i&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The speaker wen through a discussion on APIs explosion, popular ones, the ones he thinks we should be considering in cloud application and how MuleiON can be used to properly decouple an application from all the cool cloud APIs discussed and presented.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Presentation slides&lt;/b&gt;: &lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/KenYagen_DevOpsToNoOps10CloudServicesYouShouldBeUsing.pdf&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Agenda&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;impact of APIs&lt;/li&gt;
&lt;li&gt;top 10 you should be looking at&lt;/li&gt;
&lt;li&gt;integrating with APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;The impact of APIs&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://www.programmableweb.com/&quot;&gt;Programmable Web &lt;/a&gt;web site follows API proliferation (doubling/tripling every year!)&lt;/div&gt;
&lt;div&gt;
APIs more and more seen as revenue streams&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Architecture change&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
The traditional 3-tier architecture (client, server, data) is being decomposed so that 3rd party applications can start using middle-tier APIs and the Data-tier changed from a typical DB into SaaS, web services, social media APIs, etc. - the data no longer lives in one place but distributed in the cloud&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Technology shift&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Traditional Application Environements: Application/Web-App server/DB/OS&lt;/div&gt;
&lt;div&gt;
New Application Environments: Application/PaaS (in place of Web/App server)/IaaS (in place of DB and OS, ex: Amazon EC2)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Top 10 APIs by usage&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Google Maps&lt;/li&gt;
&lt;li&gt;Twitter&lt;/li&gt;
&lt;li&gt;YouTube&lt;/li&gt;
&lt;li&gt;Flicker&lt;/li&gt;
&lt;li&gt;Amazon eCommerce&lt;/li&gt;
&lt;li&gt;Facebook&lt;/li&gt;
&lt;li&gt;Twilio - Telephony service&lt;/li&gt;
&lt;li&gt;eBay&lt;/li&gt;
&lt;li&gt;Last.fm - Radio service&lt;/li&gt;
&lt;li&gt;Google search&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Top 10 cloud APIs - choices from speaker&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://www.twilio.com/&quot;&gt;Twilio&lt;/a&gt;: Telephony/SMS as a service - build text/sms/voice apps really easily (excellent API, takes seconds)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.dropbox.com/&quot;&gt;DropBox&lt;/a&gt;: File Sharing as a service - share files between all your devices/friends/coworkers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pubnub.com/&quot;&gt;PubNub&lt;/a&gt;: Publish/Subscribe Messaging as a service - real-time, global messaging for cloud and mobile apps (as about as real-time as the web can get - low latency of about 55ms over web).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.katasoft.com/&quot;&gt;Katasoft&lt;/a&gt;: Application Security as a service (now in Private BETA) - user account management, authentication and access control in your application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://airbrakeapp.com/&quot;&gt;AirBrake&lt;/a&gt;: Error Management as a service - interesting approach to error management, no need to hit the logs (can be connected to JIRA for example)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.mongohq.com/&quot;&gt;MongoHQ&lt;/a&gt;: &lt;a href=&quot;http://www.mongodb.org/&quot;&gt;MongoDB &lt;/a&gt;as a service - create MongoDB in seconds&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sendgrid.com/&quot;&gt;SendGrid&lt;/a&gt;: email as a service - way better than normal email (like gmail) and no need to run an email server&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://loggly.com/&quot;&gt;loggly&lt;/a&gt;: logging as a service - manage logs and enables easy search and navigation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://aws.amazon.com/s3/&quot;&gt;Amazon S3&lt;/a&gt;: file system as a service - simple API for storing both large and small files&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://xeround.com/&quot;&gt;xeround &lt;/a&gt;(the cloud database): MySQL as a service - direct replacement to MySQL&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
see slides for all the alternatives/contenders as well.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;The API challenge&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;All APIS are not equal&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Hard to work with different APIs (different approaches, security schemes, data formats, interpretations of REST)&lt;/li&gt;
&lt;li&gt;lots of custom code in your app.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;iPaaS: Do not clutter your app&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
Use MuleiON (integration PaaS) for loose coupling your app to this cool stuff &lt;/div&gt;
&lt;div&gt;
Your killer app --&amp;gt; integration layer (ex: MuliON) --&amp;gt; cool stuff (Twitter, etc. all that we just listed above)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Benefits&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Configuration approach to APIs&lt;/li&gt;
&lt;li&gt;Handled for you (security, session management, streaming, http callbacks)&lt;/li&gt;
&lt;li&gt;consume and invoke multiple services, retries, error handling&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;Essentially, decouples and keeps your application code clean &lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
DEMO&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/6380285688367114727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/devops-to-noops.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/6380285688367114727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/6380285688367114727'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/devops-to-noops.html' title='DevOps to NoOps - cloud APIs (MuleiON)'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-6942674292944177285</id><published>2011-11-18T17:57:00.000-05:00</published><updated>2011-12-01T15:16:05.742-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="friday"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><title type='text'>NetApp Case Study in Big Data</title><content type='html'>&lt;div&gt;
2 speakers, an Enterprise Architect from &lt;a href=&quot;http://en.wikipedia.org/wiki/NetApp&quot;&gt;NetApp &lt;/a&gt;and Principal Architect from &lt;a href=&quot;http://www.thinkbiganalytics.com/&quot;&gt;Think Big Analytics&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Big Data is not really a problem of particular interests for CAE, however, the approach taken to tackle NetApp Big Data problem might be. They use a lot of Open Source systems to tackle their issues. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Presentation slides&lt;/b&gt;: not published&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Agenda&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;NetApp big data challenge&lt;/li&gt;
&lt;li&gt;Technology assessment&lt;/li&gt;
&lt;li&gt;Drivers&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;AutoSupport Family&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;catch issues before they become critical&lt;/li&gt;
&lt;li&gt;secure automated call-home service&lt;/li&gt;
&lt;li&gt;system monitoring and non intrusive alerting&lt;/li&gt;
&lt;li&gt;RMA request without customer action&lt;/li&gt;
&lt;li&gt;enables faster incident management&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;AutoSupport - Why does it matter?&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
see slide&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;Business challenges&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Gateways&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Scale out and respect their SLAs&lt;/li&gt;
&lt;li&gt;600K ASUPs per week&lt;/li&gt;
&lt;li&gt;40% coming over the week end&lt;/li&gt;
&lt;li&gt;5% growth per week&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
ETL&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;data parsed and loaded in 15 min.&lt;/li&gt;
&lt;/ul&gt;
Data Warehouse&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;only 5% goes in data warehouse, but even then, gwoing 6-8TB per month&lt;/li&gt;
&lt;li&gt;Oracle DBMS struggling&lt;/li&gt;
&lt;li&gt;no easy access to this unstructured data&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
reporting&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;numerous mining request not met currently&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Incoming AutoSupport Volumes and TB &lt;/b&gt;&lt;b&gt;consumption&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Exponential flat file storage requirement&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;The Petri Dish&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;NetApp has its own BigData challenges with AutoSupport Data&lt;/li&gt;
&lt;li&gt;Executive guidance was to chose the solution that solved our business problem first: independent of our own technologies&lt;/li&gt;
&lt;li&gt;NetApp product teams very interested in our decision making process (the in-house customer &lt;a href=&quot;http://en.wikipedia.org/wiki/Petri_dish&quot;&gt;petri dish&lt;/a&gt;)\&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;ASUP Next - Proof of concept (POC) strategy&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;don&#39;t swallow the elephant whole&lt;/li&gt;
&lt;li&gt;Use technical POCs to validate solution components&lt;/li&gt;
&lt;li&gt;Review the POCs results and determine the end state solution&lt;/li&gt;
&lt;li&gt;size the implementation costs using the results of the POCs&lt;/li&gt;
&lt;li&gt;Make vendor decisions based on facts!&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Requirements Used for POC and RFP&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Cost effective&lt;/li&gt;
&lt;li&gt;Highly scalable&lt;/li&gt;
&lt;li&gt;Adaptive&lt;/li&gt;
&lt;li&gt;New Analytical capabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Technology Assessment&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
Essentially, they followed the following steps to validate their solutions&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Defined POC Use cases&lt;/li&gt;
&lt;li&gt;Did a Solution Comparison based on their technology survey&lt;/li&gt;
&lt;li&gt;They prototyped&lt;/li&gt;
&lt;li&gt;they benchmarked&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;AutoSupport: Hadoop Use case in POC&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
with a single 10 node hadoop cluster (on E-series with 60 disks of 2TB), they were able to change a 24 billion records query that took 4 weeks to load into a 10.5 hours load time and a previously impossible 240 billions query into one that now runs in only 18 hours! &lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;This is why they chose &lt;a href=&quot;http://hadoop.apache.org/&quot;&gt;Hadoop&lt;/a&gt;!&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Solution Architecture&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
multiple slides on architectures, requirements, considerations.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Physical Hadoop Architecture&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
see slide for all details on disks, networks, machines, RAM, etc. &lt;/div&gt;
&lt;div&gt;
All their machines run on RedHat Entrerprise (RHEL) 5.6, using ext3 filesystem&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Hadoop Architecture components&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Flume: Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. Its main goal is to deliver data from applications to Hadoop’s HDFS.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;HDFS: Hadoop Distributed File System, is the primary storage system used by Hadoop applications.&lt;/li&gt;
&lt;li&gt;HBase: the Hadoop database to be used when you need random, realtime read/write access to your Big Data. &lt;/li&gt;
&lt;li&gt;MapReduce: a software framework introduced by Google in 2004 to support distributed computing on large data sets on clusters of computers.&lt;/li&gt;
&lt;li&gt;Pig: from Apache, it is a platform for analyzing large data sets that consists of a high-level language for expressing data analysis programs, coupled with infrastructure for evaluating these programs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Ingestion data flows&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
3 types of ASUPs (AutoSUPport)&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Actionable&lt;/li&gt;
&lt;li&gt;Weekly logs&lt;/li&gt;
&lt;li&gt;Performance data&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
10 &lt;a href=&quot;https://github.com/cloudera/flume/wiki&quot;&gt;flume &lt;/a&gt;servers for 200GB/hour &lt;/div&gt;
&lt;div&gt;
less than 1 minute for case creation&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Performance benchmarks&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
see slides&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;DAS vs E-Series performance benchmark&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
E-series multi LUN configuration changes improved read-write I/O by 65%&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Hadoop Benefits&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Scalability - by decouling computing from the storage&lt;/li&gt;
&lt;li&gt;Improved Performance - improved response time to meet their SLAs (faster than Oracle DBMS onunstructured data abd faster that tradiontal server-based storage&lt;/li&gt;
&lt;li&gt;Enterprise Robustness - grade protection of HDFS metadata&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Takeaways&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;NetApp assessed multiple traditional DB technologies to solve its Big data problem and determine Hadoop was the best fit. &lt;/li&gt;
&lt;li&gt;HW &amp;amp; SW short and long term costs were key in the decision to move to Hadoop on ESeries&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/6942674292944177285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/netapp-case-study-in-big-data.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/6942674292944177285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/6942674292944177285'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/netapp-case-study-in-big-data.html' title='NetApp Case Study in Big Data'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-122405627265683453</id><published>2011-11-18T17:50:00.001-05:00</published><updated>2011-12-01T15:17:00.647-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="edge"/><category scheme="http://www.blogger.com/atom/ns#" term="friday"/><category scheme="http://www.blogger.com/atom/ns#" term="html 5"/><category scheme="http://www.blogger.com/atom/ns#" term="jquery"/><category scheme="http://www.blogger.com/atom/ns#" term="phonegap"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><title type='text'>HTML 5 Design and Development Tooling</title><content type='html'>Changed from &quot;Rearchitecting amazon.com for the Cloud&quot; - had enough Amazon sales speech last time...&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b style=&quot;white-space: pre;&quot;&gt;Agenda&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Adobe_edge&quot;&gt;Edge &lt;/a&gt;- Motion and Interaction Design Tools&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/WebKit&quot;&gt;Webkit &lt;/a&gt;contributions - CSS Regions, CSS Shaders&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/JQuery_Mobile&quot;&gt;JQuery Mobile&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/PhoneGap&quot;&gt;PhoneGap&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Adobe_Flash&quot;&gt;Flash &lt;/a&gt;News&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;Presentation slides&lt;/b&gt; &lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/ChristopheCoenraets_and_GregWilson_HTML5DesignAndDevelopmentTooling.pdf&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;Adobe Edge&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
New web motion and interaction design tool that allows designers to bring animated content to websites, using web standards like &lt;a href=&quot;http://en.wikipedia.org/wiki/HTML5&quot;&gt;HTML 5&lt;/a&gt;, &lt;a href=&quot;http://www.css3.info/&quot;&gt;CSS 3&lt;/a&gt;, etc.&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;Live Demo - quite &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;powerful&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt; tool (produces Java Script)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;Webkit contributions&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
The Adobe &lt;a href=&quot;http://www.adobe.com/devnet/html5/articles/css-shaders.html&quot;&gt;CSS shaders&lt;/a&gt; proposals went via W3C (see &lt;a href=&quot;https://dvcs.w3.org/hg/FXTF/raw-file/tip/custom/index.html&quot;&gt;here&lt;/a&gt;)&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;allows effects on any elements of the DOM&lt;/li&gt;
&lt;li&gt;Live demo with Chromium (which implemented this spec) using CSS Shaders studio &lt;/li&gt;
&lt;li&gt;&lt;i&gt;wurp, fold &lt;/i&gt;effects kind of cool&lt;/li&gt;
&lt;li&gt;works directly on actual HTML content (videos, animations, selections,  all still work in the animated pages) - example given with untouched Google maps site embedded in animation some animations/effects&lt;/li&gt;
&lt;li&gt;real cool and easy to use to add artistic elements to standard web content&lt;/li&gt;
&lt;li&gt;shaders not already available - pending standard publication&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b style=&quot;white-space: pre;&quot;&gt;JQuery mobile + &lt;/b&gt;&lt;b style=&quot;white-space: pre;&quot;&gt;PhoneGap&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;can run as an app or withing the browserit creates a native shell with a web view which load the web content or application&lt;/li&gt;
&lt;li&gt;used to publish to android, ios, etc.&lt;/li&gt;
&lt;li&gt;demo showing how to package web content from a browser to IOs by using XCode PhoneGap extensions&lt;/li&gt;
&lt;li&gt;Xcode=Apple&#39;s IDE for IOS applications&lt;/li&gt;
&lt;li&gt;saw an IPad simulator showing how the app would look on an actual IPad&lt;/li&gt;
&lt;li&gt;Then an IPhone simulator was only a click away.&lt;/li&gt;
&lt;li&gt;generated application deployable to AppStore for example.&lt;/li&gt;
&lt;li&gt;he then tested in on an actual device instead of than on a simulator&lt;/li&gt;
&lt;li&gt;very easy to test applications for various platforms/devices&lt;/li&gt;
&lt;li&gt;he then tried it on an Android phone (with a produced android app output from Eclipse instead of XCode)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;2 problems with what was demoed so far&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;multiple IDEs/tools for multiple target platforms (Xcode for IOS, Eclipse for Android, windows, etc.)&lt;/li&gt;
&lt;li&gt;debugging remote html applications when it runs on a device&lt;/li&gt;
&lt;/ul&gt;
for the first problem, phonegap offers a a builder service in the cloud on EC2 (see &lt;a href=&quot;http://build.phonegap.com/&quot;&gt;build.phonegap.com&lt;/a&gt;) - all connectable to a Git repository&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
for the later problem, they developed the Web Inspector Remote tool (called also &lt;a href=&quot;http://phonegap.github.com/weinre/&quot;&gt;weinre&lt;/a&gt;), similar to web application debuggers such as the one in Chrome, Firebug, etc.)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;Flash news&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Adobe painted as non HTML company... which they claim is not the case&lt;/li&gt;
&lt;li&gt;They think Flash and Flex are still useful in certain cases (pear to pear application for examples - ex: game with 2 players, another ex: enterprise application: ) like real-time data streaming, collaboration sessions between multiple users/devices, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
Kind of amazing how easy it was to develop animated web content applications and to deliver them to multiple devices!&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/122405627265683453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/html-5-design-and-development-tooling.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/122405627265683453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/122405627265683453'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/html-5-design-and-development-tooling.html' title='HTML 5 Design and Development Tooling'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-1210453989411178376</id><published>2011-11-18T17:48:00.001-05:00</published><updated>2011-11-28T16:38:36.511-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="extensions"/><category scheme="http://www.blogger.com/atom/ns#" term="friday"/><category scheme="http://www.blogger.com/atom/ns#" term="platform"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><title type='text'>Building an ecosystem for hackers</title><content type='html'>&lt;div&gt;
Session previously called &quot;DVCS for agile teams&quot; has been cancelled and changed to &quot;Building an ecosystem for hackers&quot; given by a speaker from Atlassian&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Presentation slides &lt;/b&gt;&lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/RichManalang_BuildingAnEcosystemForHackers.pdf&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;The software life-cycle&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
It goes from ideas, to prototype, to code, to shipping the product and rinse and repeat until your product is bloated and the code begins to stink!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Conventional wisdom&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Users are stupid&lt;/li&gt;
&lt;li&gt;Software is hard&lt;/li&gt;
&lt;li&gt;Supporting software sucks&lt;/li&gt;
&lt;li&gt;We want simple&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;How can we empower users&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Build opinionated software (if you do not like it, don&#39;t buy it - but you are thus building a fence around your product)&lt;/li&gt;
&lt;li&gt;Build a platform they can hack on (you allow you customers to get involved)&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;b&gt;Two schools of thoughts&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Product #1: customers are sand-boxed &lt;b&gt;in &lt;/b&gt;the environment&lt;/li&gt;
&lt;li&gt;Product #2: customers build against APIs (REST)&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;b&gt;Who does #1 well&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Apple&lt;/li&gt;
&lt;li&gt;Android&lt;/li&gt;
&lt;li&gt;Atlassian&lt;/li&gt;
&lt;li&gt;Chrome/Firefox&lt;/li&gt;
&lt;li&gt;WordPress&lt;/li&gt;
&lt;li&gt;Many others - you know it is well done when companies can start living within the ecosystem&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;How do they do this at Atlassian&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;you start with a plugin framework (they adopted an OSGi based plugin system)&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Speakeasy&lt;/i&gt; is a framework allowing to create javascripts/CSS and attach them to Atlassian elements (ex: JIRA, etc.) - it runs a little GIT server within permitting to see extensions sources, fork from them, publish updates, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Demo&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Using JIRA - he used a little &quot;kick ass&quot; extension permitting to kill bugs in the agile view.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Pimp it with REST&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Many &lt;a href=&quot;http://en.wikipedia.org/wiki/REST&quot;&gt;REST &lt;/a&gt;APIs built in Atlassian&lt;/li&gt;
&lt;li&gt;They are built as extensions using the extensions framework using &lt;i&gt;Jersey&lt;/i&gt; (Java REST library), which gives a &lt;a href=&quot;http://en.wikipedia.org/wiki/Web_Application_Description_Language&quot;&gt;WADL (Web Application Description Language) &lt;/a&gt;file.&lt;/li&gt;
&lt;li&gt;The provided SDK tools offers among other things a command line interface to automate all that is needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;I have built my plugin, now what&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
The provide the &lt;i&gt;Plugin Exchange&lt;/i&gt; platform to exchange plugins (soon, that will support selling plugins like the AppStore)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Hey, we have got a community!&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Atlassian uses contests to have developers start to use developed extensions mechanisms&lt;/li&gt;
&lt;li&gt;They also host code contests, once a year, to encourage people developing new plugins (ex: JIRA Hero)&lt;/li&gt;
&lt;li&gt;They host conferences for developers (ex: AtlasCamp) - online community of good, but face-to-face events are better!&lt;/li&gt;
&lt;li&gt;The fun elements is required for the ecosystem to actually live.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;In the end&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
People want to contribute to your product, but you need to give the ways to do it!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/1210453989411178376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/building-ecosystem-for-hackers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/1210453989411178376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/1210453989411178376'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/building-ecosystem-for-hackers.html' title='Building an ecosystem for hackers'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-7973700894614177143</id><published>2011-11-18T17:47:00.001-05:00</published><updated>2011-11-28T16:37:52.930-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CI"/><category scheme="http://www.blogger.com/atom/ns#" term="DVCS"/><category scheme="http://www.blogger.com/atom/ns#" term="gerrit"/><category scheme="http://www.blogger.com/atom/ns#" term="git"/><category scheme="http://www.blogger.com/atom/ns#" term="hudkins"/><category scheme="http://www.blogger.com/atom/ns#" term="hudson"/><category scheme="http://www.blogger.com/atom/ns#" term="jenkins"/><category scheme="http://www.blogger.com/atom/ns#" term="Mylyn"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><title type='text'>Automating (almost) everything using Git, Gerrit, Hudson and Mylyn</title><content type='html'>&lt;div&gt;
A presentation on how good open source tools can be integrated together to push development efficiency up.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Presentation slides &lt;/b&gt;&lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/RyanSlobojan_AutomatingalmostEverythingUsingGitGerritHudsonAndMylyn.pdf&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;First, here are all the involved tools references&lt;/b&gt;&lt;/div&gt;
&lt;i&gt;&lt;a href=&quot;http://git-scm.com/&quot;&gt;Git&lt;/a&gt; (Distributed Version Control System-DVCS tool)&lt;/i&gt;&lt;br /&gt;
&lt;div&gt;
&lt;i&gt;&lt;a href=&quot;http://code.google.com/p/gerrit/&quot;&gt;Gerrit&lt;/a&gt; (Code Review tool)&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://hudson-ci.org/&quot;&gt;&lt;i&gt;Hudson&lt;/i&gt; &lt;/a&gt;+  &lt;a href=&quot;http://jenkins-ci.org/&quot;&gt;Jenkins &lt;/a&gt;(Continuous Integration-CI tools), known as Hudkins and &lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;a href=&quot;http://eclipse.org/mylyn/&quot;&gt;Mylyn&lt;/a&gt; (Eclipse-based Application Lifecycle Management-ALM tool)&lt;/i&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Why GIT?&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;DVCS&lt;/li&gt;
&lt;li&gt;Open Source&lt;/li&gt;
&lt;li&gt;Airplane-friendly (all commits can be done offline since in DVCS, commits are done locally - a push is required to put it on remote servers)&lt;/li&gt;
&lt;li&gt;Push and Pull (inter-developer direct exchange, no need to pass via central server)&lt;/li&gt;
&lt;li&gt;Branching and Merging (amazing for this aspect - automatic merging tool which was required because of the so many Linux kernel contributors) - based on the if it hurts, do it more often!&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Why Hudkins?&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;CI&lt;/li&gt;
&lt;li&gt;Open Source&lt;/li&gt;
&lt;li&gt;Large community&lt;/li&gt;
&lt;li&gt;Lots of plugins&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Why Gerrit?&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Code reviews for GIT (line by line annotations)&lt;/li&gt;
&lt;li&gt;Open Source&lt;/li&gt;
&lt;li&gt;Permit to build a Workflow in the system&lt;/li&gt;
&lt;li&gt;Access Control (originally created to manage Android contributions)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Why Mylyn?&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;90% of IDE&#39;s content is irrelevant... (see image) - (lack of integration, information overload, context-loss when multi tasking or when exchanging tasks with another developer)&lt;/li&gt;
&lt;li&gt;Open Source&lt;/li&gt;
&lt;li&gt;Part of Eclipse 99% of the time&lt;/li&gt;
&lt;li&gt;NOTES: Other IDEs supported? Seems not. Apparently, it has performance issues (Eclipse users seem to disable Mylyn right off the bat...) &lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Pie chart of a developers&#39;s day&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
see preso image, but essentially, a typical developer takes 34% of his day reading/writing code, 10% testing code and the rest of the day producing nothing significant (including a 22% for pure interruptions inefficiencies)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Why Mylyn part 2?&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Mylin can track all you do within a task (what classes you changed, the web pages you access, etc.)&lt;/li&gt;
&lt;li&gt;Ex: A guy goes on vacation; you can by reopening the task to complete it in his place, access the context that actually follows the tasks and thus see the relevant classes, web pages, etc.&lt;/li&gt;
&lt;li&gt;Task focused interface (task system in the background - like JIRA, Bugzilla, etc.)&lt;/li&gt;
&lt;li&gt;Over 60 ALM tools supported&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Contribution Workflow&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
See image from preso&lt;/div&gt;
&lt;div&gt;
Before: Patch based code reviews&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;essentially a back and forth thing between contributors and intergrators (code did not compile, then a test did not pass, etc.) - typically, it used to take approximately 2 days to integrate a piece of code into one of the open source projects listed above&lt;/li&gt;
&lt;li&gt;Limited automation&lt;/li&gt;
&lt;li&gt;Difficult to trace changes&lt;/li&gt;
&lt;li&gt;cumbersome process&lt;/li&gt;
&lt;li&gt;Late feedback&lt;/li&gt;
&lt;/ul&gt;
After tools integration:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Code pushed to Gerrit (which acts as a GIT repository - with code review automation)&lt;/li&gt;
&lt;li&gt;Code changes then pulled from Hudson, build is done and Hudson vote back to Gerrit based on all required gates passed or not (build OK: vote +1, tests OK: vote +1, etc.); if a step fail, data flows back into developer IDEs mentioning for example that a certain test failed, etc. the feedback is almost instantaneous.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Demo: Collaboration&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
A complete demo was conducted to show the previously discussed tools integration. Very interesting even though it was Eclipse-based ( ;-) ) &lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;NOTE on Business Processes&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
It is possible to model business processes at Gerrit level. For example, all developers could have access rights to commit to Gerrit, but only a certain predefined user can commit to the central repository.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Awesome! How do we do it at home now?&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Setting up the server (in that order)&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Install all the softwares and then:&lt;/li&gt;
&lt;li&gt;Clone GIT repository&lt;/li&gt;
&lt;li&gt;Initialize Gerrit&lt;/li&gt;
&lt;li&gt;Register and configure a Gerrit human user&lt;/li&gt;
&lt;li&gt;Register and configure a Build user (the automating user)&lt;/li&gt;
&lt;li&gt;Install Hudkins Git and Gerrit plugins&lt;/li&gt;
&lt;li&gt;Configure standard Hudkins build&lt;/li&gt;
&lt;li&gt;Configure Hudkins Gerrit build (integrate the review within the build)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Setting up the client (contributor - in that order)&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Install EGit, Mylyn Builds (Hudson), and Mylyn Reviews (Gerrit)&lt;/li&gt;
&lt;li&gt;Clone GIT repository (pull)&lt;/li&gt;
&lt;li&gt;Configure Gerrit as remote master&lt;/li&gt;
&lt;li&gt;There is no step 4! Done.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Setting up the client (committer - in that order)&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Configure a Mylyn builds Hudson repository &lt;/li&gt;
&lt;li&gt;Configure a Mylyn review Gerrit  repository&lt;/li&gt;
&lt;li&gt;Create a task query for Gerrit&lt;/li&gt;
&lt;li&gt;There is no step 4! Done&lt;b&gt;.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/7973700894614177143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/automating-almost-everything-using-git.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/7973700894614177143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/7973700894614177143'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/automating-almost-everything-using-git.html' title='Automating (almost) everything using Git, Gerrit, Hudson and Mylyn'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-4769396268008697802</id><published>2011-11-18T17:46:00.000-05:00</published><updated>2011-11-18T17:46:56.125-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="friday"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="quality"/><category scheme="http://www.blogger.com/atom/ns#" term="visualization"/><title type='text'>Visualizing Software Quality - Visualization Tools</title><content type='html'>This is the second part of a previous post found &lt;a href=&quot;http://qconsf2011.blogspot.com/2011/11/visualizing-software-quality-metrics.html&quot;&gt;here&lt;/a&gt;. If you haven&#39;t done so yet, go read it. Now, as promised, here is a summary list of the tools which can be used to visualize various aspects of software quality.&amp;nbsp;I will provide a short description for each kind of visualizations and for more detail, I strongly recommend you go visit Erik&#39;s blog at&amp;nbsp;&lt;a href=&quot;http://erik.doernenburg.com/&quot;&gt;http://erik.doernenburg.com/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For all of the following types of software quality visualization charts or graph, you must first collect and aggregate the metrics data. This can be done using static analysis tools, scripts or even Excel. What is important is defining &lt;u&gt;what&lt;/u&gt; you want to measure, finding the best automated way to get the data (&lt;u&gt;how&lt;/u&gt;) and aggregating the necessary measures to produce the following views. Each of the following views have different purposes however, they are all very easy to understand and give you a very simple way to see the quality of your software.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Toxicity Chart&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The toxicity chart is a tool which can be used to visualize the internal quality of your software, more specifically, it can show you how &lt;i&gt;truly horrible&lt;/i&gt; your code is. In the toxicity chart, each bar represents a class and the height of each bar is a composition of metrics showing you how toxic the class is. So, the higher the bar, the more &lt;i&gt;horrible&lt;/i&gt; the class is. It can be an effective way to represent poor quality to less technically inclined people (e.g. management types).&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj7Davp4bbcxQjJe11fCR7gqCrpptLpRA9uPNaL4br971q3judcU5EWKs7Sh9QebfT8YV8RsfzUmEJ_JYcn93DlfuXpnAZnwX-LedZecmbVY745ZOo-mktq69T6GZj3bVXPsqe-CSDcaM/s1600/toxicity_hibernate.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;220&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj7Davp4bbcxQjJe11fCR7gqCrpptLpRA9uPNaL4br971q3judcU5EWKs7Sh9QebfT8YV8RsfzUmEJ_JYcn93DlfuXpnAZnwX-LedZecmbVY745ZOo-mktq69T6GZj3bVXPsqe-CSDcaM/s400/toxicity_hibernate.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Toxicity Chart&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
An example of a metric which composes the bar could be the length of a method. To generate this measure, you must define a threshold for the specific metric which would then produce a proportional score. For example, if the line-of-code threshold for a method is 20 lines and a method contains 30 lines, its toxicity score would be 1.5 since the method is 1.5 times above the set threshold.&amp;nbsp;For more details on the toxicity chart, read the following &lt;a href=&quot;http://erik.doernenburg.com/2008/11/how-toxic-is-your-code/&quot;&gt;article&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;b&gt;Dependency Structure Matrix&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;The following matrix is used to understand structure by showing dependencies between groups of classes such as packages (in Java) or namespaces (in C#). The resulting table can be used to uncover cyclic dependencies and level of coupling between these groups.&amp;nbsp;For more details on the DSM, go read the following&amp;nbsp;&lt;a href=&quot;http://erik.doernenburg.com/2010/04/dependency-structure-matrix/&quot;&gt;article&lt;/a&gt;.&lt;/div&gt;&lt;div style=&quot;font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrXsWVF_jD2CsDuhufNizX1wRwComGYDY3ulpnM6EVTw0WSYtCKVe-7BvUfGp9ImEsmHK6V_OImyYXvpRcMt7AP0ml_yZzFzdH3hGtXgMiUnsNqvvMhkQnADyZFcM-cZsILodHG01Ln_g/s1600/DSM1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrXsWVF_jD2CsDuhufNizX1wRwComGYDY3ulpnM6EVTw0WSYtCKVe-7BvUfGp9ImEsmHK6V_OImyYXvpRcMt7AP0ml_yZzFzdH3hGtXgMiUnsNqvvMhkQnADyZFcM-cZsILodHG01Ln_g/s320/DSM1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;DSM&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div style=&quot;font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Metric Tree Maps&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
A metrics tree map visualizes the structure of the code by rendering the hierarchical package (namespace) structure as nested rectangles with parent packages encompassing child packages. (Excerpt taken from &lt;a href=&quot;http://erik.doernenburg.com/&quot;&gt;Erik&#39;s blog&lt;/a&gt;).&amp;nbsp;For more details on the metric tree maps, go read the following&amp;nbsp;&lt;a href=&quot;http://erik.doernenburg.com/2010/05/metrics-tree-maps/&quot;&gt;article&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUOxQlssEqCidKP4d2VCAtJAEDk0zXMiEJAmzh1lvdnKoYQ_bwz22mBGI-QRJ_tzqCOIAECnffgimCYTkCZA4ihZUimAMdRQlJyZXM-V_SHWa_ppMoiSqcAempceZ3jiw0DMgRa6_pRoY/s1600/JRuby-sizecomplexity.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;276&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUOxQlssEqCidKP4d2VCAtJAEDk0zXMiEJAmzh1lvdnKoYQ_bwz22mBGI-QRJ_tzqCOIAECnffgimCYTkCZA4ihZUimAMdRQlJyZXM-V_SHWa_ppMoiSqcAempceZ3jiw0DMgRa6_pRoY/s400/JRuby-sizecomplexity.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Metric Tree Map Polymetric View&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Visualizing Build Pain&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The following graph shows a series of &quot;build lines&quot; representing the state of builds over time. Each build gets a line. This is very useful in &lt;i&gt;continuous integration&lt;/i&gt; environments as it gives you a high level view of &amp;nbsp;build related problems. Colour is used in the following way: green for good, red for broken, and blue for building. So, if you set this up on a big screen in a highly visible area of your office, people will know very quickly when many problems arise. As an added bonus, keeping the build lines from past days will give you an idea of how well the development teams have reduced the broken builds from the past.&amp;nbsp;For more details on the build line graphs, go read the following &lt;a href=&quot;http://erik.doernenburg.com/2009/11/making-build-pain-visible/&quot;&gt;article&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfwiZV-Otf4j0tcNmf2lOjtYoSQJi9umxVuDcPJxzFOWmzDjqVKdqrfD_IuIWzOkOLKkgqv_0zwTEd9MUjt6VoPv5W_gsmJ2cIMk1W9eoxNn73esLRRdQRs3nZsLRuMGFy5rpzvQpewrU/s1600/buildlines-end.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;228&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfwiZV-Otf4j0tcNmf2lOjtYoSQJi9umxVuDcPJxzFOWmzDjqVKdqrfD_IuIWzOkOLKkgqv_0zwTEd9MUjt6VoPv5W_gsmJ2cIMk1W9eoxNn73esLRRdQRs3nZsLRuMGFy5rpzvQpewrU/s400/buildlines-end.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Build Lines&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;System Complexity View&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System Complexity is a polymetric view that shows the classes of the system, organized in inheritance hierarchies (excerpt from &lt;a href=&quot;http://www.moosetechnology.org/docs/polymetricviews&quot;&gt;Moose Technology&lt;/a&gt;). Each class is represented by a node:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;width = the number of attributes of the class&lt;/li&gt;
&lt;li&gt;height = the number of methods of the class&lt;/li&gt;
&lt;li&gt;color = the number of lines of code of the class&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho6Hcm8eXj6v3uTswabR7Oxp6dIgHkSnxPlmg7xTdWs-G2Nf9luIZC4ckwuACwUh2JolXBA-pGGEubMuGEJFYLuUcuz8dL6m348eiSjS7ImLFP0cu1ScrBIULUYh02K1fnAQ4vzjvqrrM/s1600/xraySystemComplexityView.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;243&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho6Hcm8eXj6v3uTswabR7Oxp6dIgHkSnxPlmg7xTdWs-G2Nf9luIZC4ckwuACwUh2JolXBA-pGGEubMuGEJFYLuUcuz8dL6m348eiSjS7ImLFP0cu1ScrBIULUYh02K1fnAQ4vzjvqrrM/s400/xraySystemComplexityView.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;System Complexity Polymetric View&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;CodeCity 3D View&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Finally, this type of visualization has to be the most awesome way to look at your software.&amp;nbsp;CodeCity is written by Richard Wettel and is an integrated environment for software analysis, in which software systems are visualized as interactive, navigable 3D cities. The classes are represented as buildings in the city, while the packages are depicted as the districts in which the buildings reside. The visible properties of the city artifacts depict a set of chosen software metrics (excerpt from &lt;a href=&quot;http://www.moosetechnology.org/tools/vw/codecity&quot;&gt;Moose Technologies&lt;/a&gt;).&amp;nbsp;For more details on this, you can also go read the following &lt;a href=&quot;http://erik.doernenburg.com/2009/07/moose-mse-for-java-and-cs/&quot;&gt;article&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUeNXPo-oZ5_A3a9TziROCRrhhNNeRsxsubxZ5hKSlSVDouBFrm4psCXhNccKplVfTP4Y7oPZnO2t7noqbSqG_r0efdnLAOYVN6JZXCKIcH_lH4lZEvlXKktEJHSz_0_zuM5jEZjAnTVQ/s1600/codecity_screenshot.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;217&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUeNXPo-oZ5_A3a9TziROCRrhhNNeRsxsubxZ5hKSlSVDouBFrm4psCXhNccKplVfTP4Y7oPZnO2t7noqbSqG_r0efdnLAOYVN6JZXCKIcH_lH4lZEvlXKktEJHSz_0_zuM5jEZjAnTVQ/s400/codecity_screenshot.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;CodeCity Polymetric View&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/4769396268008697802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/visualizing-software-quality.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4769396268008697802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4769396268008697802'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/visualizing-software-quality.html' title='Visualizing Software Quality - Visualization Tools'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj7Davp4bbcxQjJe11fCR7gqCrpptLpRA9uPNaL4br971q3judcU5EWKs7Sh9QebfT8YV8RsfzUmEJ_JYcn93DlfuXpnAZnwX-LedZecmbVY745ZOo-mktq69T6GZj3bVXPsqe-CSDcaM/s72-c/toxicity_hibernate.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-501789330222608029</id><published>2011-11-18T15:00:00.001-05:00</published><updated>2011-12-14T06:36:13.883-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AWS"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="friday"/><category scheme="http://www.blogger.com/atom/ns#" term="netflix"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><title type='text'>Lesson Learned from Netflix in the Global Cloud [UPDATED]</title><content type='html'>Simply put, if you want to do Cloud, don&#39;t try to build one, find the best possible infrastructure web services platform in the could out there and use it! I&#39;ll try to give you a glimpse of what&amp;nbsp;&lt;a href=&quot;http://qconsf.com/sf2011/speaker/Adrian+Cockcroft&quot;&gt;Adrian Cockcroft&lt;/a&gt; form &lt;a href=&quot;https://www.netflix.com/&quot;&gt;Netflix&lt;/a&gt; presented this morning but omit the technical details as I will post the presentation link later in an updated version of this post.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
If you don&#39;t know about Netflix, you might have been living under a rock for the past couple of years but just in case, Netflix provides services for watching TV and movies online to over 20 million users globally across multiple platforms most of which can instantly stream the content over the Internet. When Netflix decided to move its operation to the cloud, it decided to use a public Cloud. Why use the public Cloud you ask? Well... Netflix just couldn&#39;t build data centres fast enough and has decided to search for a robust and scalable Cloud offering to develop their platform on. The choice was set on &lt;a href=&quot;http://aws.amazon.com/&quot;&gt;Amazon Web Services&lt;/a&gt;&amp;nbsp;(AWS).&amp;nbsp;Partnering with AWS has allowed Netflix to be ~100% Cloud based! Some smaller back end bits are still not moved to the Cloud however, they are aggressively pushing to change that. The simple rational behind it all was that AWS has dedicated infrastructure support teams which Netflix did not, so the move was a no brainer.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWpQJiQQJM0-VCjwPSqsRNu5rjhESWIVWS-aprIMDEqXwyX0NLCJorNSj065YRzHKRnAte5exb2Bk2F-CariTBtoTp8hIdgub8PEw6_3OTmF7T995vOC1ntmoLYYFVmjdqeGs9xo5yRb0/s1600/IMG_1348.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;297&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWpQJiQQJM0-VCjwPSqsRNu5rjhESWIVWS-aprIMDEqXwyX0NLCJorNSj065YRzHKRnAte5exb2Bk2F-CariTBtoTp8hIdgub8PEw6_3OTmF7T995vOC1ntmoLYYFVmjdqeGs9xo5yRb0/s400/IMG_1348.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Netflix in the Cloud on AWS&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
So, is your company thinking of being in the Cloud or has it started trying to build? Only time will tell which path will #win, however, know that&amp;nbsp;if you want to make the move now, AWS is readily available to anyone.&amp;nbsp;A lot of the content from this presentation go into the technical details of their platform architecture on AWS and I invite you to come back to this post later today for a direct link to the presentation as it becomes available. [UPDATED: &lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/AdrianCockcroft_NetflixInTheGlobalCloud.pdf&quot;&gt;Slides Link&lt;/a&gt;]&lt;br /&gt;
&lt;br /&gt;
In the meantime, check out &lt;a href=&quot;http://techblog.netflix.com/&quot;&gt;The Netflix &quot;Tech&quot; Blog&lt;/a&gt;&amp;nbsp;for some discussion on the subject.</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/501789330222608029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/lesson-learned-from-netflix-in-global.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/501789330222608029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/501789330222608029'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/lesson-learned-from-netflix-in-global.html' title='Lesson Learned from Netflix in the Global Cloud [UPDATED]'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWpQJiQQJM0-VCjwPSqsRNu5rjhESWIVWS-aprIMDEqXwyX0NLCJorNSj065YRzHKRnAte5exb2Bk2F-CariTBtoTp8hIdgub8PEw6_3OTmF7T995vOC1ntmoLYYFVmjdqeGs9xo5yRb0/s72-c/IMG_1348.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-725985625410491145</id><published>2011-11-18T12:26:00.021-05:00</published><updated>2011-11-18T13:13:52.851-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dart"/><category scheme="http://www.blogger.com/atom/ns#" term="friday"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="keynote"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><title type='text'>Dart, Structured Web Programming by Google</title><content type='html'>&lt;a href=&quot;http://qconsf.com/sf2011/speaker/Gilad+Bracha&quot;&gt;Gilad Bracha&lt;/a&gt;, software engineering from Google, is presenting an overview of Dart, a new programming language for structured web programming. Code example links are posted at the end.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV29iu0TsQBV8qtYuB4YHqRgiTiDzuwjDGpkoWPJ6Xc5XAbZvDOv7sxscJaQSUUbdjSOLYjH97jyjWv6cOJfFQKeNQvX0q1-SaNrkV7O5S-f1m2yiMrqqaEKdLaSerXfboD5uTpkflu98/s1600/IMG_1338.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;239&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV29iu0TsQBV8qtYuB4YHqRgiTiDzuwjDGpkoWPJ6Xc5XAbZvDOv7sxscJaQSUUbdjSOLYjH97jyjWv6cOJfFQKeNQvX0q1-SaNrkV7O5S-f1m2yiMrqqaEKdLaSerXfboD5uTpkflu98/s320/IMG_1338.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Gilad Brache on Dart&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Dart is a technology preview, so this it open to change and will definitely change. On today&#39;s Web, developing large scale applications is hard. It is hard to find the program structure, there is a lack of static types, no support for libraries, tool support is weak and startup performance is bad.&amp;nbsp;Innovation is Essential.&amp;nbsp;Dart tries to fills a vacuum; the competition is NOT &lt;i&gt;JavaScript&lt;/i&gt;… but fragmented mobile platforms are. So, what is Dart?&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;A simple and unsurprising OO programming language&lt;/li&gt;
&lt;li&gt;Class-based single inheritance with interfaces&lt;/li&gt;
&lt;li&gt;Has optional static types&lt;/li&gt;
&lt;li&gt;Has real lexical scoping&lt;/li&gt;
&lt;li&gt;It is single-threaded&lt;/li&gt;
&lt;li&gt;Has a familiar syntax&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
You can try Dart online at: &lt;a href=&quot;http://try.dartlang.org/&quot;&gt;http://try.dartlang.org&lt;/a&gt;. Dart has a different type checker. In other programming languages, a&amp;nbsp;conventional type-checker is a lobotomized theorem prover, i.e. it&amp;nbsp;tries to prove the program obeys a type system.&amp;nbsp;If it can&#39;t construct a proof the program is considered invalid; &lt;i&gt;&quot;Guilty until proven innocent&quot;.&amp;nbsp;&lt;/i&gt;In Dart, you are &quot;&lt;i&gt;Innocent until prevent guilty&quot;&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
In Dart, types are optional (more on &lt;a href=&quot;http://www.dartlang.org/articles/optional-types/&quot;&gt;optional types&lt;/a&gt;). During development, one can choose to validate types but by default, type annotations have no effect and no cost… the code runs free!&lt;br /&gt;
&lt;br /&gt;
There are no threads in Dart. The world has suffered enough with threads. Dart has isolates. They are actor-like units or concurrency and security. Each isolate is conceptually a process,&amp;nbsp;nothing is shared and all communication takes place via message passing. Isolates support concurrent execution.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2dGnHSCK1CF0sFI6wfwOzMKB1AXCOQWkhrAIjDGMOReRf5f0kWPCzd-CfRH8SJte5kr9LzMdfGtiGakdlcj-rz78wKja6mU7KnLnoqeXxsTKtWLWKzTcfjEHwTcEG28Az2LKQScYeOdk/s1600/IMG_1342.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2dGnHSCK1CF0sFI6wfwOzMKB1AXCOQWkhrAIjDGMOReRf5f0kWPCzd-CfRH8SJte5kr9LzMdfGtiGakdlcj-rz78wKja6mU7KnLnoqeXxsTKtWLWKzTcfjEHwTcEG28Az2LKQScYeOdk/s320/IMG_1342.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Dart Execution&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
On Dart performance, when translated to &lt;i&gt;JavaScript&lt;/i&gt;, it should be at parity with handwritten &lt;i&gt;JavaScript&lt;/i&gt; code. On the VM, it should be substantially better.&lt;br /&gt;
&lt;br /&gt;
In conclusion, Dart is not done yet. Every feature of every programming language out there has been proposed on the Dart mailing list, however, Google has not taken any decision on these yet. By all means, go check out the preview, try it out and participate!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Some code examples&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Hello World -&amp;nbsp;&lt;a href=&quot;http://try.dartlang.org/s/bk8g&quot;&gt;http://try.dartlang.org/s/bk8g&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Generics -&amp;nbsp;&lt;a href=&quot;http://try.dartlang.org/s/dyQh&quot;&gt;http://try.dartlang.org/s/dyQh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Isolates -&amp;nbsp;&lt;a href=&quot;http://try.dartlang.org/s/cckM&quot;&gt;http://try.dartlang.org/s/cckM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
You can learn more about Dart at&amp;nbsp;&lt;a href=&quot;http://www.dartlang.org/&quot;&gt;http://www.dartlang.org/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/725985625410491145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/dart-structured-web-programming-by.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/725985625410491145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/725985625410491145'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/dart-structured-web-programming-by.html' title='Dart, Structured Web Programming by Google'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV29iu0TsQBV8qtYuB4YHqRgiTiDzuwjDGpkoWPJ6Xc5XAbZvDOv7sxscJaQSUUbdjSOLYjH97jyjWv6cOJfFQKeNQvX0q1-SaNrkV7O5S-f1m2yiMrqqaEKdLaSerXfboD5uTpkflu98/s72-c/IMG_1338.JPG" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-2676718801329111045</id><published>2011-11-18T10:53:00.003-05:00</published><updated>2011-11-18T16:59:45.232-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="friday"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="topics"/><title type='text'>Friday&#39;s Plan</title><content type='html'>&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Here is today&#39;s plan following the keynote. Don&#39;t hesitate to give your feedback or start a discussion in the comments.&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Myself:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Netflix in the Global Cloud - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Netflix+in+the+Global+Cloud&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Realtime Web Apps with HTML5 WebSocket and Beyond - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Realtime+Web+Apps+with+HTML5+WebSocket+and+Beyond&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&lt;li&gt;NoSQL Applications Panel - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/NoSQL+Applications+Panel&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&lt;li&gt;On track for the cloud: Building a hybrid cloud at Canadian Pacific - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/On+track+for+the+cloud%3A++Building+a+hybrid+cloud+at+Canadian+Pacific&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The Architecture of Oracle&#39;s Public Cloud - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/The+Architecture+of+Oracle%27s+Public+Cloud&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Steve 2.0:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Automating (almost) everything using Git, Gerrit, Hudson and Mylyn - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Automating+%28almost%29+everything+using+Git%2C+Gerrit%2C+Hudson+and+Mylyn&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&lt;li&gt;DVCS for agile teams - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/DVCS+for+agile+teams&quot;&gt;link&lt;/a&gt; - &lt;span class=&quot;Apple-style-span&quot;&gt;cancelled &lt;/span&gt;and replaced with Building an ecosystem for hackers - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Building+an+Ecosystem+for+Hackers&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Rearchitecting amazon.com for the Cloud - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Rearchitecting+amazon.com+for+the+Cloud&quot;&gt;link&lt;/a&gt; - changed to HTML 5 Design and Development Tooling - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/HTML+5+Design+and+Development+Tooling&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&lt;li&gt;NetApp Case Study - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/NetApp+Case+Study&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Integrating SaaS applications with Mule iON - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Integrating+SaaS+applications+with+Mule+iON&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/2676718801329111045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/fridays-plan.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/2676718801329111045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/2676718801329111045'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/fridays-plan.html' title='Friday&#39;s Plan'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-4678337817061904680</id><published>2011-11-17T19:31:00.001-05:00</published><updated>2011-11-18T16:54:59.000-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="quality"/><category scheme="http://www.blogger.com/atom/ns#" term="thursday"/><category scheme="http://www.blogger.com/atom/ns#" term="visualization"/><title type='text'>Visualizing Software Quality - Metrics &amp; Views</title><content type='html'>A recurring theme in presentations at QCon SF 2011 is the use of visualization systems. This morning, I attended a presentation entitled &lt;i&gt;Software Quality – You know It When You See It&lt;/i&gt;. It was presented by &lt;a href=&quot;http://qconsf.com/sf2011/speaker/Erik+Doernenburg&quot;&gt;Eric Doernenburg&lt;/a&gt; from &lt;a href=&quot;http://www.thoughtworks.com/&quot;&gt;ThoughtWorks&lt;/a&gt; and will most definitely appeal to all the software QA buffs out there. This topic has a lot of content so I will spread my notes across multiple posts. Eric first posed the following question:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;&quot;How can you see software quality or non-quality?&quot;&lt;/blockquote&gt;Well, as it turns out, there are many ways this can be done. Simply put, the steps are fairly simple and straightforward:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Collect metrics&lt;/li&gt;
&lt;li&gt;Aggregate data&lt;/li&gt;
&lt;li&gt;Render graphics&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
In this post series, I will cover all three of these steps by presenting examples of available&amp;nbsp;tools used&amp;nbsp;to &amp;nbsp;visualize software quality however, before we can do that, we must observe the software and firstly collect a few metrics.&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;b&gt;Types of Metrics&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;What types of metrics exist which can be used to me sure software quality? We have the lines of code (LoC), method length, class size, cyclomatic complexity, weighted method per class, coupling between objects or classes, amount of duplication, check-in count, testing coverage, testability and test-to-code ratio only to name a few. Data collection can be mostly automated and tools exist out there to do this. For examples, research tools such as iPlasma (see &lt;a href=&quot;http://loose.upt.ro/download/papers/marinescu-iPlasma.pdf&quot;&gt;reference paper&lt;/a&gt;) provide such capability for extracting a range of different software metrics. This is the first step in producing a visual representation but&amp;nbsp;before going into more detail on visualization tools, lets now take a look a some viewpoint metaphors on software quality which present the problem of &quot;what&quot; should be observed.&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;The 30000 ft Level View&lt;/b&gt;&lt;br /&gt;
At this height (or at any arbitrarily greater height) we have a view on software that is very macro. We see component diagrams, high level architecture, compositions, deployment diagrams, etc... Not very useful from a quality perspective because we don&#39;t have enough detail to properly measure the quality of the software being observed; A lot of abstraction layers exist between these high level views and the actual system. Also, it is very common that what the architect dreamt up versus the actual production code are two very separate beasts.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Ground Level View&lt;/b&gt;&lt;br /&gt;
At this level, one can spot and address many quality issues at the line-of-code level. This might seem relevant at first but consider this level might be a little too micro to be efficient. Visualizing quality at the line-of-code level can easily overwhelm us with too much detail.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The 10000 ft Level View&lt;/b&gt;&lt;br /&gt;
Think of this view a being just at the &quot;right level&quot;. At 10000 feet, there is not too much detail and the observable components have enough detail which make them prime for quality visualization.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;to be continued in another post...&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/4678337817061904680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/visualizing-software-quality-metrics.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4678337817061904680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4678337817061904680'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/visualizing-software-quality-metrics.html' title='Visualizing Software Quality - Metrics &amp; Views'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-8962225913805528190</id><published>2011-11-17T17:06:00.000-05:00</published><updated>2011-11-17T18:51:28.459-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="info"/><category scheme="http://www.blogger.com/atom/ns#" term="mike lee"/><category scheme="http://www.blogger.com/atom/ns#" term="product engineering"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="thursday"/><title type='text'>Mike Lee on Product Engineering</title><content type='html'>This is a follow-up post on last night&#39;s keynote. If you have about 47 minutes to spare, I highly recommend you have a look at the following presentation (&lt;a href=&quot;http://www.infoq.com/presentations/Product-Engineering&quot;&gt;link&lt;/a&gt;) on InfoQ given by Mike Lee at the Strange Loops conference on November 10, 2011. We had the encore at QCon SF last night. Enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiPjymHt1SjmSvTr1F_s9R4rtRKy8_tzibOkMgf_7IBaJxBpbu_AfxK0dqFdDIUt0BByjVRu5VpIBW7GyaFa-b5UOmNbQST6audUxas2M7HuPI9SYbeVX1IpfQgbXz5tGy6eCsNIUkMS0/s1600/IMG_1224.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiPjymHt1SjmSvTr1F_s9R4rtRKy8_tzibOkMgf_7IBaJxBpbu_AfxK0dqFdDIUt0BByjVRu5VpIBW7GyaFa-b5UOmNbQST6audUxas2M7HuPI9SYbeVX1IpfQgbXz5tGy6eCsNIUkMS0/s320/IMG_1224.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/8962225913805528190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/mike-lee-on-product-engineering.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/8962225913805528190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/8962225913805528190'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/mike-lee-on-product-engineering.html' title='Mike Lee on Product Engineering'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiPjymHt1SjmSvTr1F_s9R4rtRKy8_tzibOkMgf_7IBaJxBpbu_AfxK0dqFdDIUt0BByjVRu5VpIBW7GyaFa-b5UOmNbQST6audUxas2M7HuPI9SYbeVX1IpfQgbXz5tGy6eCsNIUkMS0/s72-c/IMG_1224.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-135803330875497249</id><published>2011-11-17T12:37:00.029-05:00</published><updated>2011-11-17T15:30:41.554-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="business"/><category scheme="http://www.blogger.com/atom/ns#" term="keynote"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="thursday"/><title type='text'>Things I Wish I&#39;d Known</title><content type='html'>&lt;div&gt;Rod Johnson (&lt;a href=&quot;p://qconsf.com/sf2011/speaker/Rod+Johnson&quot;&gt;background info&lt;/a&gt;) of &lt;a href=&quot;http://www.springsource.com/&quot;&gt;SpringSource&lt;/a&gt;&amp;nbsp;discusses some things he wish he&#39;d known when he ventured on the business (dark) side of things with his start up.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjiuOchPVWoss9k-NSmBAWhkYNYRlxc0EaltMTWxk33p_3oX9JmDR-3xt17sRgG9ISAofAGo2KBBe5FstRtwKHl9ESCS4hfE7ZYnM0P8zD-ELFh1s4K9_r_2RIJWVX2RzGmUahZbyrssM/s1600/IMG_1249.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;239&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjiuOchPVWoss9k-NSmBAWhkYNYRlxc0EaltMTWxk33p_3oX9JmDR-3xt17sRgG9ISAofAGo2KBBe5FstRtwKHl9ESCS4hfE7ZYnM0P8zD-ELFh1s4K9_r_2RIJWVX2RzGmUahZbyrssM/s320/IMG_1249.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Rod Johnson&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Most software developers are quite good with technology; for this reason, Rod&#39;s keynote focused more on business than technology.&amp;nbsp;In business, especially in start ups, there are some intense highs (e.g. financial success, changing the word) but equally painful lows (e.g. layoffs, not taking a salary, years of obsessive).&lt;br /&gt;
&lt;br /&gt;
So, if your planning to do a start-up, you need to ask yourself: where is the opportunity? Remember that technology must come first! There must be an opportunity for disruption.&amp;nbsp;Where is there a market gap?&amp;nbsp;Did everyone else fail to see something?&amp;nbsp;Did someone else screw up?&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
Sometime, the question are complicated and the answers are simple. Try to prove yourself wrong. Be your toughest critic. Why is there a business here? Is it less painful to abandon a thought experiment than a business? There will always be a better idea.&lt;br /&gt;
&lt;br /&gt;
Do NOT start writing code... it&#39;s addictive if you&#39;re any good at it.&lt;br /&gt;
&lt;br /&gt;
Once you&#39;ve validated your business idea, &lt;b&gt;believe it&lt;/b&gt;!&amp;nbsp;Vision must matter to you at an emotional level. Align you team on the vision.&amp;nbsp;Unless someone like you cares a whole awful lot, nothing is going to get better. Just think of Steve Jobs.&amp;nbsp;Are you prepared for success or failure? Success means years of obsession which has a big impact on family, friends and hobbies. You lifestyle can be reduced compared to a normal job. And what about failure? There are ranges of outcomes. At best, improving a personal brand or at worst, significant financial impact and wasted years.&lt;br /&gt;
&lt;br /&gt;
Being an entrepreneur means a lot of risk. Many successful entrepreneurs have repeated failures but have bounced back. You can and will get things wrong. Some you can get away with for awhile since you can&#39;t get everything right the first time. So long as you are ready to change, this will help you. Some things, however, you cannot get wrong such as legal aspects of a business.&lt;br /&gt;
&lt;br /&gt;
A great team makes a great company; This is what investors are looking for. Building a team is about complementary skills. First, you need to understand yourself and know what things you are good at and what things you suck at. Assemble individuals who possess the required skills and agree on your vision and ambition. Remember that you cannot afford to have different goals. In essence:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;&quot;We’re all a little weird. And life is weird. And when we find someone whose weirdness is compatible with ours, we join up with them and fall into&amp;nbsp;mutually satisfying weirdness—and call it love—true love.&quot; - &lt;i&gt;Dr. Seuss&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
On investment, if you&#39;re starting a software company, you probably think you need more money than you think. A great investor will lift you to another level. A poor investor won&#39;t help and will exploit you. You will be married to your investors so choose wisely. All investors are not equal. A good trick to pick out good investors is &lt;a href=&quot;http://en.wikipedia.org/wiki/Due_diligence&quot;&gt;due diligence&lt;/a&gt;. Find out a bit more on the person you want to do business with before signing a the contract.&lt;br /&gt;
&lt;br /&gt;
Finally, a few mistakes you shouldn&#39;t do:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Don&#39;t piss people off, it will come back to bite you&lt;/li&gt;
&lt;li&gt;Don&#39;t let customers drive your product roadmap&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/135803330875497249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/things-i-wish-id-known-ongoing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/135803330875497249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/135803330875497249'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/things-i-wish-id-known-ongoing.html' title='Things I Wish I&#39;d Known'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjiuOchPVWoss9k-NSmBAWhkYNYRlxc0EaltMTWxk33p_3oX9JmDR-3xt17sRgG9ISAofAGo2KBBe5FstRtwKHl9ESCS4hfE7ZYnM0P8zD-ELFh1s4K9_r_2RIJWVX2RzGmUahZbyrssM/s72-c/IMG_1249.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-6710308633818795678</id><published>2011-11-17T12:27:00.038-05:00</published><updated>2011-11-28T16:36:58.771-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="thursday"/><title type='text'>Cloud-Powered Continuous Integration and Deployment</title><content type='html'>The speaker comes from Amazon and wants to give us advice on Continuous Integration (CI) and Continuous Delivery (CD) - in the cloud. In the end, I only participated in the first half of his presentation that contained CI basic stuff. When it would have been interesting, the speaker started to be really Amazon EC2 centric... not moch to retain from this session, maybe except the Poka yo-ke technique (see below).&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Presentation slides&lt;/b&gt; &lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/JineshVaria_CloudPoweredContinuousIntegrationAndDeployment.pdf&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;At amazon, the Customer is the center of their universe&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Old way was to flow from Requirements to Development, Check-in to Testing and QA to Release. Most of the learning from customers is at the end at the Release phase and a little bit on Requirement phase but pretty much none the middle phases so to learn faster, the goal is to make the inner steps smaller and apply CI, CD and Continuous Optimizations&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;CI&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Goal: to have a working state of the code at any point in time&lt;/li&gt;
&lt;li&gt;Benefit: fix bug earlier when they are cheaper to fix&lt;/li&gt;
&lt;li&gt;Metric: a new guy can checkout and compile on his first day on the job&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Poka yo-ke technique&lt;/b&gt; &lt;/div&gt;
&lt;div&gt;
See &lt;a href=&quot;http://en.wikipedia.org/wiki/Poka-yoke&quot;&gt;here&lt;/a&gt;:  A poka-yoke is any mechanism in a lean manufacturing process that helps an equipment operator avoid (yokeru) mistakes (poka). Its purpose is to eliminate product defects by preventing, correcting, or drawing attention to human errors as they occur.&lt;/div&gt;
&lt;div&gt;
Ex: ATM machines with card swipers designed so you keep you card at hand instead of those that &quot;eat&quot; your card offering you a way to possibly forget to take it back when you leave the ATM.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Basic lessons&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Keep absolutely &lt;b&gt;everything &lt;/b&gt;in version control (scripts, etc.)&lt;/li&gt;
&lt;li&gt;Commit early, commit often&lt;/li&gt;
&lt;li&gt;Always checkin to trunk, avoid branching&lt;/li&gt;
&lt;li&gt;take responsibility for check ins breaking the build&lt;/li&gt;
&lt;li&gt;automate the build, test, deploy process&lt;/li&gt;
&lt;li&gt;be prepared to stop the mainline when breaking occurs&lt;/li&gt;
&lt;li&gt;only one way to deploy and everybody uses the same way&lt;/li&gt;
&lt;li&gt;be prepared to revert to previous versions&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;b&gt;Cloud&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
VCS systems in the cloud, CI servers in the cloud, distributed build in the cloud&lt;/div&gt;
&lt;div&gt;
They use Jenkins, Team city, cruise control, bamboo&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/6710308633818795678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/cloud-powered-continuous-integration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/6710308633818795678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/6710308633818795678'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/cloud-powered-continuous-integration.html' title='Cloud-Powered Continuous Integration and Deployment'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-4546139322745824166</id><published>2011-11-17T12:27:00.036-05:00</published><updated>2011-11-28T16:36:19.037-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="thursday"/><title type='text'>Uptime in High Volume Systems - Lessons Learned</title><content type='html'>&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
Excellent presentation from &lt;i&gt;Urban Airship&lt;/i&gt; (UA) - mainly, what struck me is the way they seem to be Agile and Lean in the real sense of the terms, and at all levels of their company, from Engineering to Operations, etc. The guy had way too many slides for an hour however... here&#39;s the overview (more details at first, then, less and less as the speaker accelerated... I will put the slides below for those interested in more details!):&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;Presentation slides &lt;/b&gt;&lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/ErikOnnen_UptimeInHighVolumeMessagingSystemsLessonsLearned.pdf&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;b&gt;About Urban Airship&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Hosting for mobile services &lt;/li&gt;
&lt;li&gt;Unified API for services across platforms&lt;/li&gt;
&lt;li&gt;Content delivery at all scale&lt;/li&gt;
&lt;li&gt;SLAs for throughput, latency&lt;/li&gt;
&lt;li&gt;Apple, Android, RIM&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;b&gt;UA is a Lean Company&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Specifically Lean startup&lt;/li&gt;
&lt;li&gt;From wikipedia: Use of FOSS and employment of Agile Techniques; is a &quot;ferocious customer-centric rapid iteration company&quot; &lt;/li&gt;
&lt;li&gt;Attention to &lt;i&gt;Continuous Improvement&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Value the &lt;i&gt;elimination of waste&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Transparent, &lt;i&gt;open processes&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Does not apply to just Engineering but also to Operations&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;UA by numbers&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;more than 20K developers&lt;/li&gt;
&lt;li&gt;300 millions active applications installs use our APIs across&lt;/li&gt;
&lt;li&gt;more than 170 millions unique devices&lt;/li&gt;
&lt;li&gt;10s of billions of API requests per month&lt;/li&gt;
&lt;li&gt;10 millions direct socket connections to our servers&lt;/li&gt;
&lt;li&gt;more than 50TB worth of analytic data&lt;/li&gt;
&lt;li&gt;30 software engineers, 5 operations engineers&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;Obligatory Architecture slide&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
See slides that will be posted soon&lt;br /&gt;
&lt;div&gt;
3-tier architecture (using Apache Cassandra, PostgreSQL, Java, Python, HDFS, Hbase big user (like Facebook))&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;Architecture - General principles&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Keep everyone moving in the same direction&lt;/li&gt;
&lt;li&gt;Help discrete teams understand how they interact&lt;/li&gt;
&lt;li&gt;Think in terms of small discrete services&lt;/li&gt;
&lt;li&gt;Continuous capacity planning based on real data&lt;/li&gt;
&lt;li&gt;Avoid local optimization decision making&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;Architecture - Services&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
Trending towards a service based architecture&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
Critical traits of a services&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Minimal exposed functionality (Smallest reasonable surface area to the API and Operate on one type of data and do it well)&lt;/li&gt;
&lt;li&gt;Simple to operate&lt;/li&gt;
&lt;li&gt;Over exposure of metrics and stats&lt;/li&gt;
&lt;li&gt;Discoverable via ZooKeeper (future)&lt;/li&gt;
&lt;li&gt;Zero visibility into inner workings of other services&lt;/li&gt;
&lt;li&gt;No shared storage mechanisms across services (services are completely fronting their datasets) - Motivation for this: security, performance, scalability&lt;/li&gt;
&lt;li&gt;Minimize shared state - use ZooKeeper if absolutely necessary&lt;/li&gt;
&lt;li&gt;Consistent logging and configuration properties&lt;/li&gt;
&lt;li&gt;Consistent implementation idioms&lt;/li&gt;
&lt;li&gt;Consistent message passing&lt;/li&gt;
&lt;li&gt;Convention for on-disk layout and structure (directory structure is standard on all their nodes)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;Architecture waste reduction&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;All back-end services are in Java and Python&lt;/li&gt;
&lt;li&gt;All Java services are made to use a single set of operational scripts&lt;/li&gt;
&lt;li&gt;Always looking for new ways to eliminate waste&lt;/li&gt;
&lt;li&gt;Architectural waste comes in many forms   (lots of data storage engines - postgreSQL, MongoDB, Cassandra, Hbase, using a complex, unfamiliar queuing system was wasteful, large diversity in approaches for managing services, worker processes, process management, etc. &lt;/li&gt;
&lt;li&gt;Developer silos - avoid the bus factor - they always have at least 2-3 persons per service (and they currently  have 35-40 services)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;Architecture - fault domains&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
essentially, they worked hard to ensure that when 2 resources are completely unrelated, they should are isolated fault domains if at all possible.&lt;br /&gt; &lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Engineering at UA&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;46% of the time they develop new features&lt;/li&gt;
&lt;li&gt;28% spent sustaining internal support&lt;/li&gt;
&lt;li&gt;21% production support&lt;/li&gt;
&lt;li&gt;2% - social stuff (beer , ping-pong)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;Engineering for iteration&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Team of about 30 engineers&lt;/li&gt;
&lt;li&gt;Small teams organized around functional area (DB guys, etc.)&lt;/li&gt;
&lt;li&gt;Shortest iterations possible - Lean MVP concept (Minimum Viable Product)&lt;/li&gt;
&lt;li&gt;No formal QA team (!) - and they seem to be happy with giving this responsibility to all their people. &lt;/li&gt;
&lt;li&gt;Frequently pairing, but not mandatory - this is the choice of the developers themselves&lt;/li&gt;
&lt;li&gt;They always leave code better than how they found it&lt;/li&gt;
&lt;li&gt;All bug fixed requires a code review in a review board&lt;/li&gt;
&lt;li&gt;Large new developments require a sit-down code/design review (a little more formal, but not that much)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;Engineering for automation&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
3 level of testing   (Unit, Functional (with mocks)and Integration). Commits are done to a single main git branch&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;b&gt;Engineering for simplicity&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
They simplified metrics and stats capture and so they can do it everywhere! &lt;/div&gt;
&lt;div&gt;
They capture latency for Service critical operations and External service invocation&lt;/div&gt;
&lt;div&gt;
They capture counters for Service critical operations   and Services faults&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Engineering for Operations&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Tests and Deployment scripts are done within the development teams (their definition of done essentially includes the deployment automation). &lt;/li&gt;
&lt;li&gt;Services deployments done via automation tools and &lt;/li&gt;
&lt;li&gt;Automation scripts always pull from prod git branch after passing auto and manual tests&lt;/li&gt;
&lt;li&gt;They apply the &quot;Put the mechanics on the helicopter&quot; principles&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;Engineering for Responsiveness&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Low latency, high throughput message paths using an in-house developed RPC system based on &lt;i&gt;Netty&lt;/i&gt; and Google&lt;i&gt; PBs&lt;/i&gt;. &lt;/li&gt;
&lt;li&gt;They support sync and async clients, journaling of messages&lt;/li&gt;
&lt;li&gt;Latency tolerant message paths   using &lt;i&gt;Kafka&lt;/i&gt; for pub-sub messaging   (they generally favor pub-sub model)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;Engineering for Availability&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;They use dark launch (like Facebook) which essentially is a roll out of a new functionality to a subset of customers &lt;/li&gt;
&lt;li&gt;Take new service in or out of prod with no customers impact   (Double writes, single reads, migration , cutover, Load balanced http with blended traffic to new and old service&lt;/li&gt;
&lt;li&gt;Their service abstraction helps immensely &lt;/li&gt;
&lt;li&gt;Requires extra discipline for co-existing versions or services&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;Engineering for Continuous Improvement&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
They use the &lt;a href=&quot;http://en.wikipedia.org/wiki/5_Whys&quot;&gt;5 whys &lt;/a&gt;approach&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Operations at UA&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
A team of 5 operations engineers handling more than 100 servers   (Mostly bare metal, using EC2 for surge capacity)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;Operations for Transparency&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
They measure absolutely &lt;b&gt;everything&lt;/b&gt;, and monitor only the important things&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
See the slides here: TBD&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/4546139322745824166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/uptime-in-high-volume-systems-lessons.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4546139322745824166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4546139322745824166'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/uptime-in-high-volume-systems-lessons.html' title='Uptime in High Volume Systems - Lessons Learned'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-7117707705705882468</id><published>2011-11-17T12:27:00.026-05:00</published><updated>2011-11-28T16:35:44.248-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="thursday"/><title type='text'>Retrospectives, Who Needs Them, Anyway?</title><content type='html'>&lt;div&gt;
&lt;b&gt;Book references:&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;http://www.amazon.com/Project-Retrospectives-Handbook-Team-Reviews/dp/0932633447/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1321569740&amp;amp;sr=1-1&quot;&gt;Project Retrospectives: A Handbook for Teams Reviews&lt;/a&gt;)&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;http://www.amazon.com/Agile-Retrospectives-Making-Teams-Great/dp/0977616649/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1321569677&amp;amp;sr=1-1&quot;&gt;Agile Retrospectives (Making Good Teams great)&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;b&gt;Presentation slides &lt;/b&gt;&lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/AinoVongeCorry_RetrospectivesWhoNeedsThemAnyway.pdf&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;What is a retro?&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
Essentially it is a chance to reflect and learn (historically called postmortem made to learn from failures)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Norman Keirth &lt;/b&gt;(&lt;i&gt;Project Retrospectives: A Handbook for Teams Reviews &lt;/i&gt;author)&lt;b&gt; Prime Directive&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&quot;regardless of &lt;i&gt;what &lt;/i&gt;we discover, we must understand and truly believe that &lt;i&gt;everyone&lt;/i&gt; did their &lt;i&gt;best job&lt;/i&gt; he or she could, given what was known at the time, his/her &lt;i&gt;skills&lt;/i&gt; and &lt;i&gt;abilities&lt;/i&gt;, the &lt;i&gt;resources available&lt;/i&gt;, and the &lt;i&gt;situation&lt;/i&gt; at hand.&quot;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;What happens during retros - the 5 steps &lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Set the stage - getting ready (ex: create safety, I&#39;m too busy)&lt;/li&gt;
&lt;li&gt;Gather data - &lt;i&gt;the past &lt;/i&gt;(ex: artifacts contest, Timeline)&lt;/li&gt;
&lt;li&gt;Generate insigths - &lt;i&gt;now &lt;/i&gt;(ex: fish-bone, 5 whys, patterns and shifts)&lt;/li&gt;
&lt;li&gt;Decide what to do - &lt;i&gt;the future &lt;/i&gt;(ex: Making the magic happen, SMART goals)&lt;/li&gt;
&lt;li&gt;Closing the retro - &lt;i&gt;retro sumary&lt;/i&gt; (ex: what helped, what hindered, delta)&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;b&gt;Stories from the trenches&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;We should never impose retros on people not wanting retros... it never works!&lt;/li&gt;
&lt;li&gt;There is a difference between retros and discussions at the cafeteria: for retros, you have (or need!) shared commitment to find solutions. &lt;/li&gt;
&lt;li&gt;Serves to celebrate good things as well.&lt;/li&gt;
&lt;li&gt;Serves as points to evaluate where we are going&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Esther Derby&#39;s &lt;/b&gt;(&lt;i&gt;Agile Retrospectives&lt;/i&gt;&lt;b&gt; &lt;/b&gt;author)&lt;b&gt; findings&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
retros can be :&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;boring&lt;/li&gt;
&lt;li&gt;painful (ex: finger-pointing) to the point people want to stop them&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
those 2 issues come from a lack of :&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;focus&lt;/li&gt;
&lt;li&gt;participation (thus the need to set the stage properly)&lt;/li&gt;
&lt;li&gt;genuine insight (you can&#39;t only do start/stop/cont because they only show symptoms... what is the root cause behind the symptoms)&lt;/li&gt;
&lt;li&gt;buy-in (takes a genuine facilitator - never the team leader - has to be neutral to the team, ideally from another team)&lt;/li&gt;
&lt;li&gt;follow-through (followup is key otherwise, this is a lost of time)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;More stories&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;30 minutes is the shortest retros possible (for a team that knows exactly what to do) - typically, minimum of an hour.&lt;/li&gt;
&lt;li&gt;Finger pointing is a retrospective killer... a key to get out of this pattern is to change subject&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Ground rules&lt;/i&gt; are really useful to put constraints on how retros are conducted (&lt;i&gt;no naming no blaming&lt;/i&gt; rule for example - interpersonal issues shall not be addressed in retros but by management in parallel)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;No naming, no blaming!&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;people, like kids, respond in much better ways to positive comments than negative comments.&lt;/i&gt; Negative comments leads to bad team work and eventually bad results! See the &lt;i&gt;Prime directive&lt;/i&gt; again and how it actually helps with this essential ground rules.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Identify changes&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
It is not enough to reflect, you need to take actions to change things. Use SMART goal and name a responsible to follow up on each goal:&lt;/div&gt;
&lt;div&gt;
Specific&lt;/div&gt;
&lt;div&gt;
Measurable&lt;/div&gt;
&lt;div&gt;
Attainable&lt;/div&gt;
&lt;div&gt;
Relevant&lt;/div&gt;
&lt;div&gt;
Timely&lt;/div&gt;
&lt;div&gt;
(&lt;a href=&quot;http://en.wikipedia.org/wiki/SMART_criteria&quot;&gt;http://en.wikipedia.org/wiki/SMART_criteria&lt;/a&gt;)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You start the next retros by asking how we are doing with regards to previously set SMART goals.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Don&#39;t &quot;sell&quot; retros, instead&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
sell a way of learning how to:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;avoid repeated mistakes&lt;/li&gt;
&lt;li&gt;identify and share success&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Take away&lt;/b&gt;: &lt;br /&gt;
&lt;div&gt;
If you leave out a step in retrospectives, you will make problems emerge that you do not understand fully nor find solutions to.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/7117707705705882468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/retrospectives-who-needs-them-anyway.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/7117707705705882468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/7117707705705882468'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/retrospectives-who-needs-them-anyway.html' title='Retrospectives, Who Needs Them, Anyway?'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-1310635797599390642</id><published>2011-11-17T12:27:00.025-05:00</published><updated>2011-11-28T16:35:08.349-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="thursday"/><title type='text'>And It All Went Horribly Wrong: Debugging Production Systems</title><content type='html'>Intro: &lt;a href=&quot;http://en.wikipedia.org/wiki/Maurice_Wilkes&quot;&gt;Maurice Wilkes&lt;/a&gt; quote: &lt;br /&gt;
&lt;div&gt;
&lt;i&gt;&quot;As soon as we started programming, we found out to our surprise that it wasn&#39;t as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life fro&lt;/i&gt;&lt;i&gt;m then on was going to be spent in finding mistakes in my own programs.&quot;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Presentation slides &lt;/b&gt;&lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/BryanCantrill_AndItAllWentHorriblyWrongDebuggingProductionSystems.pdf&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Debugging through the ages&lt;/b&gt; : &lt;/div&gt;
&lt;div&gt;
Production systems are more complicated (abstraction, componeurization, etc.) and less debuggable! When something goes wrong, it is all opaque and more and more difficult to fix...&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;How have we made it this far?&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;we architect ourselves to survive component failure&lt;/li&gt;
&lt;li&gt;we forced ourselves to stateless tiers&lt;/li&gt;
&lt;li&gt;when there are states, we considered semantics (ACID, BASE) to increase availability&lt;/li&gt;
&lt;li&gt;redundant systems&lt;/li&gt;
&lt;li&gt;clouds (especially unreliable ones, like Amazon) have expended the architectural imperative to survive data-center failure&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Do we still need to care about failur&lt;/b&gt;&lt;b&gt;e?&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
single component failures still has significant costs (both economic and run-time)... but most dangerously, a single component failure puts the global system in a&lt;i&gt; more vulnerable mode&lt;/i&gt; where further failures is more likely to happen... This is a&lt;i&gt; cascading failure&lt;/i&gt; - and this is what induces failures in mature and reliable systems.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Cascaded failure example 1:&lt;/b&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://www.sptimes.com/News/050700/photos/tb-skywaybuick.jpg&quot; style=&quot;cursor: pointer; float: left; height: 206px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; margin-top: 0px; width: 345px;&quot; /&gt;&lt;br /&gt;
&lt;div&gt;
An example of a bridge that collapsed in Tampa Bay because of a boat with ballasts full (which was not supposed to happen) hit the bridge (which was not supposed to happen either)  that had been built by a crooked contractor playing with sand/cement ratio in concrete to save money (which was not supposed to happen either - after all, this is Florida, not Quebec!). In the end, it took all those &quot;unlikely&quot; events to all occur to cause the bridge to fall.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Wait, it gets worse&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;this assumes that the failure is fail stop&lt;/li&gt;
&lt;li&gt;if failure is transient a single component failure can &lt;i&gt;alone &lt;/i&gt;induce system failure&lt;/li&gt;
&lt;li&gt;monitoring attempts to get at this by establishing liveness criteria for the system - and allowing operator to turn transient failure into fatal failure...&lt;/li&gt;
&lt;li&gt;... but if monitoring becomes too sophisticated or invasive, it risks becoming so complicated as to compound failure.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Cascaded failure example 2:&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
An image of 737 rudder PCU schematic (details &lt;a href=&quot;http://www.airlinesafety.com/faq/B-737Rudder.htm&quot;&gt;here&lt;/a&gt;). Another example of a cascaded failure that led to B737 landing issues.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Debugging in the modern era&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
- Failure - even or a single component - erodes oeverall reliability system&lt;/div&gt;
&lt;div&gt;
- When a single component fails, we need to understand why and fix it&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Debugging fatal component failure&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;when a component fails fatally, its state is &lt;i&gt;static &lt;/i&gt;and &lt;i&gt;invalid&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;by saving the state, to stable storage, in DRAM for example, the component can be debugged postmortem&lt;/li&gt;
&lt;li&gt;one starts with the invalid states and proceeds backward to find the transition from a valid state to an invalid one&lt;/li&gt;
&lt;li&gt;this technique is old: core dumps&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Postmortem advantages&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;no run-time systems overhead&lt;/li&gt;
&lt;li&gt;debugging can occur anytime, in parallel of the production system&lt;/li&gt;
&lt;li&gt;tooling can be very rich since the overhead caused to a run-time system is not a problem &lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Cascaded failure example 3&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
Flight Data Recorder from Air France crash (747) found 1.5 years after the crash&lt;/div&gt;
&lt;div&gt;
This recovery definitely permitted postmortem analysis&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Postmortem challenges&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;need the mechanism for saving state on failure (ex: core dumps)&lt;/li&gt;
&lt;li&gt;must record sufficient state (program text + program data)&lt;/li&gt;
&lt;li&gt;need sufficient state present in DRAM to allow for debugging&lt;/li&gt;
&lt;li&gt;must manage state such that storage is not overrun by a repeatedly pathological system&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Conslusion: &lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
these challenges are real but surmountable - as in some open source systems presented below (MDB, node.js, DTrace, etc.)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Postmortem debugging: MDB&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;a debugger in illumos OS (solaris derivative)&lt;/li&gt;
&lt;li&gt;extensible with custom debugger module&lt;/li&gt;
&lt;li&gt;well advanced for native code but much less for dynamic envirnoments such as Java, Python, Ruby, JS, Erlang...&lt;/li&gt;
&lt;li&gt;if components going into infrastructures are developed using those languages it is critical that they support postmortem debugging.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Postmortem debugging: node.js&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;not really interesting for non JAVA...&lt;/li&gt;
&lt;li&gt;debugging a dynamic environment requires a high degree of VM specificity in the debugger...&lt;/li&gt;
&lt;li&gt;see all details on dtrace.org/.../nodejs-v8-postmortem-debugging&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Debugging transient component failure&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;fatal failures, despite its violence, can be root-caused from a single failure&lt;/li&gt;
&lt;li&gt;non fatal failure, it is more difficult to compensate for and debug&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/1310635797599390642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/and-it-all-went-horribly-wrong.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/1310635797599390642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/1310635797599390642'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/and-it-all-went-horribly-wrong.html' title='And It All Went Horribly Wrong: Debugging Production Systems'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-4282445462986198103</id><published>2011-11-17T12:26:00.008-05:00</published><updated>2011-11-28T16:34:19.556-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="thursday"/><title type='text'>Reliability Engineering Matters, Except When It Doesn&#39;t</title><content type='html'>&lt;div&gt;
A presentation on Reliability Engineering (RE) and how it can be used for software systems. Quite a confusing presentation doing a full circle from &lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;RE is good for many domains including software to&lt;/li&gt;
&lt;li&gt;RE is very complex for software systems to&lt;/li&gt;
&lt;li&gt;But it is still a tool that you can use, not just an absolute one... &lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Presentation content:&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
This book written by the presenter was introduced by the host as an excellent book on the subject: &quot;&lt;a href=&quot;http://www.amazon.com/Release-Production-Ready-Software-Pragmatic-Programmers/dp/0978739213&quot;&gt;Release It!&lt;/a&gt;&quot; by Michael T. Nygard&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Presentation slides&lt;/b&gt; &lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/MichaelT.Nygard_ReliabilityEngineeringMattersExceptWhenItDoesnt.pdf&quot;&gt;here&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Context and example&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Reliability Engineering (RE) is a lot about maths so the speaker tried to present concrete examples. What if the hotel bar lighting rack falls on happy drinkers (ex: Pascal)? We could analyse the supporting chain and everything using static &amp;amp; mechanics principles. This is fine, but this abstracts other possibilities affecting the reliability such as earthquakes, beam wearing out, drunk people hanging on it occasionally, etc. or we can analyse this from another perspective: The rack held properly yesterday, today is a lot like yesterday, so the rack will be OK today again... but the point is that it will for sure eventually break and this is what RE is about.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;RE Maths&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
The presenter went through many mathematical models with hazards equations, fault density, etc. Those came from many disciplines from which RE software inspires itself, and in which the probability of failures augments with time; but software do not really wear out... so we cannot simply apply blindly those models.&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
By taking a single server example and then a multiple servers example, he presented the Reliability Graphs (&lt;a href=&quot;http://en.wikipedia.org/wiki/Reliability_block_diagram&quot;&gt;http://en.wikipedia.org/wiki/Reliability_block_diagram&lt;/a&gt;) where there is a start node and an end node and everything in between are successful reliability paths. A single path is subject to a global system failure if any subsystem fails.  &lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;3 Types of failures&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;i&gt;Independent failure&lt;/i&gt;: Failure of one unit does not make another unit more likely to fail (excellent! but is that true for software systems? not likely)&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Correlated failure&lt;/i&gt;: Failure of one unit makes another unit more likely to fail.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Common mode failure&lt;/i&gt;: Something else, external to the measured system, makes 2 redundant units likely to fail (ex: redundant LEDs in an Apollo capsule that were both subject to overheating)&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Important Note for RE when applied to software systems:&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Lots of software reliability analysis make the error of assuming a perfect independence between duplicated resources. The 2 last types of failures are way more common.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Blabla you should probably skip unless you know Andrey Markov (the mathematician)...&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
The speaker then went through more real-life examples, mainly to lead us to the various pitfalls of formal analysis with regards to software reliability.  He showed that because of Load Balacing algorithms for example, redundant systems were not independent and that a failure on one was certainly augmenting the probability of failure on other ones (receiving the load of the failed ones in this example). Also, if you run a system with 9 servers, it is certainly because you need most of them to be alive for the system to work (otherwise, you overbuilt your system...); he introduced the concept of what is the minimum number of systems required to be alive out of the total number of systems deployed. Interestingly, one of the pitfall in increasing reliability seems to be that the fail over mechanisms tend to bring with them their own failure paths... In the end, when he used quite a small system for an example (maybe 5 machines) and put in the &quot;invisible&quot; systems from the logical system block diagram (ex: switches, routers, hard drives, etc.) in the probability of failure equation, the result was no less than spectacular (I can&#39;t write this equation down!). But it certainly proved again that true independence is not existing most often in software systems. Also, unlike the famous constructions analogies, a failed software system can come back up. To handle that aspect, he introduced the work of this mathematician, &lt;a href=&quot;http://en.wikipedia.org/wiki/Andrey_Markov&quot;&gt;Andrey Markov &lt;/a&gt;and its Markov model (essentially state diagrams with probabilities of change states on each arcs). Markov systems are awfully complex for the simplest systems...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Limitations of RE with regards to software systems:&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Intractable math&lt;/b&gt; (only few systems have closed forms distributions like gaussian - more often they have exponential (ex: a single server), log normal (ex: multiplicative failures) or weibull (ex: hardware) distributions). There is also the &quot;repair&quot; distributions that could be modeled with a Poisson distribution. But in the end, which distributions do we apply to software systems? &lt;b&gt;None&lt;/b&gt;: Software fails based on load, not on time (as opposed to typical engineering disciplines)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Curse of Dimensionnality&lt;/b&gt; (you should have seen the Markov model for the simple system)&lt;/li&gt;
&lt;li&gt;Mean Time Between Failure (MTBF) is Bullshit! Note: See Google analysis a few years back on hard drive failures. Would be good to get this data for other devices (servers)&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;other big killers: &lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;human error (50-65% of all outages!)&lt;/li&gt;
&lt;li&gt;interiority&lt;/li&gt;
&lt;li&gt;distributed failure modes&lt;/li&gt;
&lt;li&gt;Lack of independence between nodes and layers&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;b&gt;So in the end, should we abandon Reliability Engineering for software system? &lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
NO! Even if RE cannot tell you when your system is OK, it can tell you whenit is not. Modeling reduces uncertainty. Use RE like other model and apply it when your system is at risk.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Reference back to the ambivalent presentation title &quot;Reliability Engineering Matters ... Except When It Doesn&#39;t&quot;.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/4282445462986198103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/reliability-engineering-matters-except.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4282445462986198103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4282445462986198103'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/reliability-engineering-matters-except.html' title='Reliability Engineering Matters, Except When It Doesn&#39;t'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-1297220903401620426</id><published>2011-11-17T11:40:00.002-05:00</published><updated>2011-11-17T12:28:41.267-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="thursday"/><category scheme="http://www.blogger.com/atom/ns#" term="topics"/><title type='text'>Thursday&#39;s Plan</title><content type='html'>Here is today&#39;s plan following the keynote. Don&#39;t hesitate to give your feedback or start a discussion in the comments.&lt;br /&gt;
&lt;br /&gt;
Myself:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Software Quality - You Know it When You See It - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Software+quality+%E2%80%93+you+know+it+when+you+see+it&quot;&gt;link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Lean Startup: Why It Rocks Far More Than Agile Development - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Lean+Startup%3A+Why+It+Rocks+Far+More+Than+Agile+Development&quot;&gt;link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Experiences with Architecture Governance of Large Industrial Software - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Experiences+with+Architecture+Governance+of+Large+Industrial+Software&quot;&gt;link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The DevOps Approach to Performance - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/The+DevOps+Approach+to+Performance&quot;&gt;link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dealing With Performanc Challenges: Optimized Serialization Techniques - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Dealing+with+Performance+challenges+%3A+Optimized+serialization+techniques&quot;&gt;link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Steve 2.0:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Reliability Engineering Matters, Except When It Doesn&#39;t - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Reliability+Engineering+Matters%2C+Except+When+It+Doesn%27t&quot;&gt;link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;And It All Went Horribly Wrong: Debugging Production Systems - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/And+It+All+Went+Horribly+Wrong%3A+Debugging+Production+Systems&quot;&gt;link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Retrospectives, Who Needs Them, Anyway? - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Retrospectives%2C+who+needs+them%2C+anyway%3F&quot;&gt;link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Uptime in High Volume Systems - Lessons Learned - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Uptime+in+High+Volume+Messaging+Systems+%E2%80%94+Lessons+Learned&quot;&gt;link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cloud-Powered Continuous Integration and Deployment - &lt;a href=&quot;http://qconsf.com/sf2011/presentation/Cloud-Powered+Continuous+Integration+and+Deployment&quot;&gt;link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/1297220903401620426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/thursdays-plan.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/1297220903401620426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/1297220903401620426'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/thursdays-plan.html' title='Thursday&#39;s Plan'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-212077822960774106</id><published>2011-11-17T11:00:00.004-05:00</published><updated>2011-11-17T18:51:28.468-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="awesome"/><category scheme="http://www.blogger.com/atom/ns#" term="keynote"/><category scheme="http://www.blogger.com/atom/ns#" term="mariachi"/><category scheme="http://www.blogger.com/atom/ns#" term="mike lee"/><category scheme="http://www.blogger.com/atom/ns#" term="product engineering"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="thursday"/><category scheme="http://www.blogger.com/atom/ns#" term="wednesday"/><title type='text'>Impressions of the conference so far...</title><content type='html'>Ok, day 1 of the conference is done. Now, what can be said about the experience up until now? Well, for one, I think QCon SF is awesome. The organization of such an event can be difficult as there are many people, many speakers, lots of coordination and a bunch of areas where slip-ups can occur but &lt;a href=&quot;http://trifork.com/&quot;&gt;Trifork&lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;http://www.infoq.com/&quot;&gt;InfoQ&lt;/a&gt; have got everything under control. The venue layout minimizes walking distance between presentations and the hotel staff is very efficient and courteous, unlike the &lt;a href=&quot;http://qconsf2011.blogspot.com/2011/11/warm-san-francisco-welcome.html&quot;&gt;cable car operators&lt;/a&gt;. So, organization-wise, I have no complaints; We are in very good hands.&lt;br /&gt;
&lt;br /&gt;
On the&amp;nbsp;(slightly)&amp;nbsp;down side, as with any such event, no matter how well you pre-plan on which topics you will cover you, will eventually end-up in a presentation that just sucks. Well… maybe the word is a little strong but, lets instead say that some of the presentation content was not in line with the expected return value inferred from the provided abstracts :) This is when having a pre-determined backup presentation plan becomes very handy.&lt;br /&gt;
&lt;br /&gt;
On the brighter side, the organizers have conjured a very innovative way to pick-up feedback after each presentation. They post people at each exit holding one or two iPods with a simple and very intuitive user interface to provide feedback. The screen is divided into three zones with a smily :( , :| &amp;nbsp;or :) associated to red, yellow and green; I&#39;ll let you guess which is which. Simply brilliant! Like it? Just touch the happy green smily. Hate it? Touch the red frowny one.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVqCFCpxblg7uDna3NAWfG6ygJSZfP-Iv3VyPfvqpHXPQn5i5p9p7cN7rNw5gMSmq-Nn_DY_udaqkoD7Axmes-3A-KanWuAPjkrSFMpq8jf0U0BrhdJlIcJEmBvRDBqJ53SXn44QJ9uRw/s1600/IMG_1246.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVqCFCpxblg7uDna3NAWfG6ygJSZfP-Iv3VyPfvqpHXPQn5i5p9p7cN7rNw5gMSmq-Nn_DY_udaqkoD7Axmes-3A-KanWuAPjkrSFMpq8jf0U0BrhdJlIcJEmBvRDBqJ53SXn44QJ9uRw/s320/IMG_1246.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Presentation Rating System&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Now, what are two things I take away from this first day at the QCon SF conference?&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;To my surprise, I think I have created a blogging monster. Let call him &quot;Steve 2.0&quot;. Coming here, we had a choice of documentation mechanisms to bring back information to the mothership: produce a standard (i.e. boring, static, non-interactive) conference report or use a blogging platform that would allow us to take notes and publish content as the day went on. Option B was taken. I&#39;m only hoping that &quot;Steve 2.0&quot; is not a transient state and that he will transpose his newly learned skills to another platform (you know which one…) after all this is over.&lt;/li&gt;
&lt;li&gt;Mike Lee is an awesome presenter. Going through a somewhat tiresome day of active listening, idea exchanging and intensive note taking was well worth the trouble for this guy&#39;s keynote. If you do not know who Mike Lee is, here is a little &lt;a href=&quot;http://qconsf.com/sf2011/speaker/Mike+Lee&quot;&gt;background information&lt;/a&gt;. His keynote on &lt;b&gt;Product Engineering&lt;/b&gt; was done wearing a mariachi suit which fitted this guy&#39;s personality and on-stage presence very well. &lt;strike&gt;I wish I could show you the video of it but as a consolation prize&lt;/strike&gt; [Update: Here&#39;s a video on &lt;a href=&quot;http://www.infoq.com/presentations/Product-Engineering&quot;&gt;InfoQ&lt;/a&gt;&amp;nbsp;of the same presentation given at the Strange Loop conference], I will link you to his &lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/MikeLee_ProductEngineering.pdf&quot;&gt;presentation slides&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwdtjSteGNKahGttCSqX418zkSng8qSlDmTp7g7ppOUQlaqWDdQwaeLYXkrOjPok1fIWTO5eM-WCDfT8f5kWWu2y_0fWXV2UcaJ8iGSbtcKeQCAHIGe001fyDfZy5XSU-fnvBe951TBww/s1600/IMG_1205.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwdtjSteGNKahGttCSqX418zkSng8qSlDmTp7g7ppOUQlaqWDdQwaeLYXkrOjPok1fIWTO5eM-WCDfT8f5kWWu2y_0fWXV2UcaJ8iGSbtcKeQCAHIGe001fyDfZy5XSU-fnvBe951TBww/s320/IMG_1205.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Mike Lee on Product Engineering&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
So, one down and two more to go. We will be posting the expected attendance schedule for day 2 very soon, so keep reading and don&#39;t forget to comment on our posts. We&#39;ll definitely take the time to answer any questions you may have.</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/212077822960774106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/impressions-of-conference-so-far.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/212077822960774106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/212077822960774106'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/impressions-of-conference-so-far.html' title='Impressions of the conference so far...'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVqCFCpxblg7uDna3NAWfG6ygJSZfP-Iv3VyPfvqpHXPQn5i5p9p7cN7rNw5gMSmq-Nn_DY_udaqkoD7Axmes-3A-KanWuAPjkrSFMpq8jf0U0BrhdJlIcJEmBvRDBqJ53SXn44QJ9uRw/s72-c/IMG_1246.JPG" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-3132804242553903569</id><published>2011-11-16T19:56:00.003-05:00</published><updated>2011-11-28T15:00:37.699-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="PaaS"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="wednesday"/><category scheme="http://www.blogger.com/atom/ns#" term="WSO2"/><title type='text'>Stratos - an Open Source Cloud Platform</title><content type='html'>&lt;div&gt;
Presentation given by WSO2, the producer of Stratos cloud-reated products. Here&#39;s some pointers from their presentation. I think this should interest all our people working on SOA implementation.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Presentation slides &lt;/b&gt;&lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/PaulFremantle_StratosAnOpenSourceCloudPlatform.pdf&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Slide 1&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Presentation of Platform as a Service (PaaS)&lt;/li&gt;
&lt;li&gt;online data doubles online every 15 months and the number of apps kind of follow the same trend&lt;/li&gt;
&lt;li&gt;what the Cloud is really depends on who you are (ex: online music for teenagers, emails for your mom, prospects for a sales guy, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
Slide 2:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;PaaS (Platform as a Service) is what is positioned between IaaS (Infrastructure as a Service, ex: Amazon) and SaaS (Software as a Service, ex: Google Apps)&lt;/li&gt;
&lt;li&gt;Stratos tries to insert itself in between the hardware and the software platforms.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
Slide 3:&lt;/div&gt;
&lt;div&gt;
What does Cloud native means:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Distributed/Dynamically wired (i.e. it works properly in the cloud)&lt;/li&gt;
&lt;li&gt;Elastic (i.e. it uses the cloud efficiently)&lt;/li&gt;
&lt;li&gt;Multi-tenant (i.e. it only costs when you use it)&lt;/li&gt;
&lt;li&gt;Self-service (i.e. you put it in the hands of users)&lt;/li&gt;
&lt;li&gt;Granularity billed (i.e. you pay for just what you use)&lt;/li&gt;
&lt;li&gt;Incrementally deployed and tested (i.e. it support seamless live upgrades - Continuous update, SxS, in-place testing and incremental deployment)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
Slide 4:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
Apply those concepts to an Enterprise architecture… Cloud is no only about Web apps, it is also about Portal, Queues and topics, DB, Registry/Repositories, Rules/CEP queries, Integrations, etc.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Slide 5:&lt;/div&gt;
&lt;div&gt;
What are the various dimensions to evaluate a PaaS:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Which languages and APIs does it support? (Are you locked in?)&lt;/li&gt;
&lt;li&gt;Can it run on a private cloud? (Are you locked in?)&lt;/li&gt;
&lt;li&gt;Which services does it offer? (Are you locked in?)&lt;/li&gt;
&lt;li&gt;Is it open source? (&lt;b&gt;Are you locked in?&lt;/b&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
Slide 6:&lt;/div&gt;
&lt;div&gt;
What are the cloud players:&lt;/div&gt;
&lt;div&gt;
1- Those without private PaaS&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Force.com / Heroku&lt;/li&gt;
&lt;li&gt;Google App Engine&lt;/li&gt;
&lt;li&gt;Amazon Elastic Beanstalk&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
2- Those with provate PaaS&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Tibco&lt;/li&gt;
&lt;li&gt;Microsoft&lt;/li&gt;
&lt;li&gt;Cloudbees&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
3- Those with both&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Stratos (obviously...)&lt;/li&gt;
&lt;li&gt;others I missed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Slide 6:&lt;/div&gt;
&lt;div&gt;
What is Stratos&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;A product: Open source, based on OSGi&lt;/li&gt;
&lt;li&gt;Services (based on the product) called Stratos Live&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
Then we got a live demo of Stratus Live&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
For more details, see&lt;a href=&quot;http://wso2.com/cloud/stratos/&quot;&gt; http://wso2.com/cloud/stratos/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
This maybe interesting for App server, ESB, Repositories, etc. seems to be a fairly complete, consistent, integrated portfolio of middleware services.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Here&#39;s a list of what they claim their offer in Stratos Live:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Application Server as a service&lt;/li&gt;
&lt;li&gt;Data as a service&lt;/li&gt;
&lt;li&gt;identity as a service&lt;/li&gt;
&lt;li&gt;Governance as a service (this one is for Pascal!)&lt;/li&gt;
&lt;li&gt;Business Activity Monitoring as a service&lt;/li&gt;
&lt;li&gt;Business Processes as a service&lt;/li&gt;
&lt;li&gt;Business Rules as a service&lt;/li&gt;
&lt;li&gt;Enterprise Service Bus (ESB) as a service&lt;/li&gt;
&lt;li&gt;Message Broker as a service&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/3132804242553903569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/stratos-open-source-cloud-platform.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/3132804242553903569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/3132804242553903569'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/stratos-open-source-cloud-platform.html' title='Stratos - an Open Source Cloud Platform'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-4546651791160480163</id><published>2011-11-16T18:31:00.011-05:00</published><updated>2011-12-01T15:20:07.867-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Garbage Collector"/><category scheme="http://www.blogger.com/atom/ns#" term="GC"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="JVM"/><category scheme="http://www.blogger.com/atom/ns#" term="latency"/><category scheme="http://www.blogger.com/atom/ns#" term="Performance tuning"/><category scheme="http://www.blogger.com/atom/ns#" term="profiling"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="wednesday"/><title type='text'>JVM performance optimizations at Twitter&#39;s scale</title><content type='html'>&lt;div&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana, sans-serif; font-size: 11px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Complete presentation about application optimization based on twitter experiments; it was Java-centric, but I tried to generalize the presented principles.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;and for those interested... I still do not like Java!&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Takeaway&lt;/b&gt;: Twitter went from 60 second of Garbage Collection (GC) per hour to 5 seconds per 3.5 days, mainly because of the internal slab allocator.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Presentation slides&lt;/b&gt; &lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/AttilaSzegedi_JVMPerformanceOptimizationsAtTwittersScale.pdf&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; font-family: inherit; font-size: 11px;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Twitter&#39;s biggest enemy: Latency&lt;/b&gt;What are the main latency contributors (from worst to less):&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Garbage collector (GC)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;in process locking and thread scheduling&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;I/O&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;application inefficient algorithms&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;but only the first one can be addressed by JVM tuning (which happens to be the expertise of the speaker)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit; font-size: 11px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Areas of performance tuning:&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Memory tuning (footprint, allocation rate, garbage collector rate)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Lock contention&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Memory footprint tuning&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Maybe you just use too much data!&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Maybe your data representation is fat! (bad data model)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Maybe you have a memory leak (not covered in remaining presentation)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Global advice for performance tuning:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Profile your applications, especially when 3rd parties are involved abd not well known (ex: primitive &lt;i&gt;SCALA&lt;/i&gt; array types eating lots of memory; another ex: &lt;i&gt;Guava&#39;s&lt;/i&gt; concurrent map eating a lot of resource - especially if you do not need concurrency).&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Even more important advice:&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Writing a new memory manager is not a good idea unless you already optimized your data and your JVM... if you start doing this, it is a strong smell that you are doing something wrong!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Fighting&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt; latency&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Performance tradeoff: Memory vs Time (convenient and valid, but oversimplified view); &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;th&lt;/span&gt;&lt;/span&gt;e performance triangle (&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;press memory usage down, push throughput up and keep latency low&lt;/span&gt;&lt;/span&gt;) is a better model, but still too simple for Twitter optimization team. In the end they use  a (optimization increase) = C x T x R where&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt; C=compactness (good data model), T= throughput  and R=responsiveness.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;The rest of the presentation was about tuning and optimizing Java JVM Garbage Collector (GC) - if you are interested, let me know (I will not document all of this in this post - lucky you!).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Side note:&lt;/b&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div style=&quot;display: inline !important;&quot;&gt;
&lt;div style=&quot;display: inline !important;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;At Twitter, they seem to also have a big gap between &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;developer&#39;s&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt; &quot;done&quot; and &quot;production ready&quot; done.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/4546651791160480163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/jvm-performance-optimizations-at.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4546651791160480163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4546651791160480163'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/jvm-performance-optimizations-at.html' title='JVM performance optimizations at Twitter&#39;s scale'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-4436710711962544078</id><published>2011-11-16T18:18:00.000-05:00</published><updated>2011-11-16T18:18:04.819-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="change"/><category scheme="http://www.blogger.com/atom/ns#" term="devops"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="wednesday"/><title type='text'>&quot;DevOps&quot; - Change is NOT the Enemy</title><content type='html'>&lt;div&gt;&lt;i&gt;From Wikipedia &lt;/i&gt;(&lt;a href=&quot;http://en.wikipedia.org/wiki/DevOps&quot;&gt;link&lt;/a&gt;):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&quot;DevOps&quot; is an emerging set of principles, methods and practices for communication, collaboration and integration between software development (application/software engineering) and IT operations (systems administration/infrastructure) professionals&quot;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Sounds familiar? It should.&lt;br /&gt;
&lt;br /&gt;
If you&#39;ve ever been part of one of these groups at some point in your career, you probably said to yourself or heard things such as: &quot;Those developers just want to rapidly push on us all this new technology but we&#39;ve yet to handle issues with the currently deployed tech.&quot; or maybe &quot;Operations are dinosaurs; they reject any opportunity to use our new software and make us stick to old outdated tech. without realizing the benefits of the new!&quot;. In essence, agile development creates change and operations want less change.&lt;br /&gt;
&lt;br /&gt;
As organizations make the move to new technologies (e.g. cloud, &lt;a href=&quot;http://en.wikipedia.org/wiki/Software_as_a_service&quot;&gt;SaaS&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Platform_as_a_service&quot;&gt;PaaS&lt;/a&gt;, WCF, .NET 4.0, etc...), the role of development versus operations teams is evolving and this change must be properly managed but, change isn&#39;t the enemy, &lt;u&gt;the lack of alignment is&lt;/u&gt;.&amp;nbsp;Businesses fail to see this and think pushing change down the pipe will magically break their reliance on monolithic applications and help them move towards more modern distributed service based applications. The fact to the matter is, distributed and loosely coupled applications are more complex to manage and also fail in a distributed way!&lt;br /&gt;
&lt;br /&gt;
This type of change has to be monitored, measure and managed so both parties can establish a better communication and collaboration relationship. Can you think of any examples where this has happened to you? (post them in the comments)&lt;br /&gt;
&lt;br /&gt;
Obviously, this post is merely skims the topic of &quot;DevOps&quot; but, I&#39;m hoping it got you thinking a little and wanting to read-up on this more.&amp;nbsp;I will be attending a presentation on Thursday more specifically on &quot;DevOps&quot; applied to addressing performance issues so hopefully I will have some detailed examples. I&#39;ll post a follow-up on this subject then.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/4436710711962544078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/devops-change-is-not-enemy.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4436710711962544078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/4436710711962544078'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/devops-change-is-not-enemy.html' title='&quot;DevOps&quot; - Change is NOT the Enemy'/><author><name>J</name><uri>http://www.blogger.com/profile/17702292824853217311</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDodmgfhCIe_FQM4-43QkExvGNKIIvpDKZQo-Zie9op5iJqUlDM6CfgoniNvnDGcS82ov-LgldGe2j4OuWXK81fxbhwLUFWgFLBIn2evpRXXf_8iFd380xylqmeghibHE/s220/photo.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8968606496450201033.post-8685999105676041565</id><published>2011-11-16T17:05:00.007-05:00</published><updated>2011-11-28T14:59:11.628-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="continuous delivery"/><category scheme="http://www.blogger.com/atom/ns#" term="failures survival principles"/><category scheme="http://www.blogger.com/atom/ns#" term="qcon"/><category scheme="http://www.blogger.com/atom/ns#" term="scalability"/><category scheme="http://www.blogger.com/atom/ns#" term="social data"/><category scheme="http://www.blogger.com/atom/ns#" term="wednesday"/><title type='text'>Scaling Social Computing - Lessons Learned at Facebook</title><content type='html'>&lt;div&gt;
A not so interesting presentation going over different aspect of Facebook growth. Anyhowm here&#39;s an abstract of the presented content:&lt;/div&gt;
&lt;div&gt;
&lt;b&gt; &lt;/b&gt;&lt;/div&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;b&gt;Lead in&lt;/b&gt;: Scaling is about dealing with failures&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;Facebook culture&lt;/b&gt;: Move fast&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Problem domain&lt;/b&gt;: social data database (lots of distributed data!)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Context&lt;/b&gt;: Facebook usage has been continuously growing for the past 7 years, every single week... that gives really no rest to the development teams&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Presentation slides&lt;/b&gt; &lt;a href=&quot;http://qconsf.com/dl/qcon-sanfran-2011/slides/RobertJohnson_ScalingSocialComputingLessonsLearnedAtFacebook.pdf&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Move fast&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;This is seen as an enabler to try lots and lots of things, to adjust more often, as a risk-taking enabler.&lt;/li&gt;
&lt;li&gt;At the beginning of a software development project, we have a lot of questions and as we proceed, questions get answered and the product evolves from the cumulative knowledge.&lt;/li&gt;
&lt;li&gt;When the outcome is uncertain, they use&lt;i&gt; &lt;/i&gt;what they call &lt;i&gt;experiments&lt;/i&gt;. They can have experiments on a daily basis, which means they can proceed from questions to questions quite fast.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Practice #1&lt;/b&gt;: Frequent small changes (never a delay waiting for a release, easier to isolate bugs)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Data model&lt;/b&gt;: Node graph data model&lt;/div&gt;
&lt;div&gt;
they consider the data objects in isolation are not as important as the relationships between them (ex: their photo app, that kind of sucks - even according to them - from a photo perspective, still works well because you can tag the photo with who is in the photo). The model contains many small objects updated in real time (typical page contains dozens of those small objects).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Social data&lt;/b&gt;: &lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Many small objects, &lt;/li&gt;
&lt;li&gt;hard to partition and cluster AND &lt;/li&gt;
&lt;li&gt;frequently changing (privacy rules need to be evaluated in real-time which seems to be their biggest concern). &lt;/li&gt;
&lt;li&gt;Data consistency is really important (they can&#39;t really infringe the privacy rules) for the user experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Other Technical aspects&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Their DB seems to be a mixed of MySQL (which they consider excellent for random reads - on flash and flash cache), HBase (ref to be found) and no SQL data.&lt;/li&gt;
&lt;li&gt;The key/tricky things relate to the data distribution and synchronization across many servers&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Scaling is how machine interact&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Bottlenecks (Network mostly for them)&lt;/li&gt;
&lt;li&gt;Handling failures&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Principle #2&lt;/b&gt;: When you reach a certain load threshold, it makes the network load explodes. The idea is to measure the load continuously and act when you are approaching this threshold (by forcing a load reduction, thus a latency increase).&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Principle #3&lt;/b&gt;: The rate of the exchange between a certain machine and lots of other machines should be dictated by the first machine (Facebook uses the &quot;throttle&quot; algorithm on the client side to maximize network switch throughput thus the site responsiveness).&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Handling Failures&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Principle #4&lt;/b&gt;: You want to intercept small problems before they become bigger (ex: network breakdown)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Principle #5&lt;/b&gt;: At Facebook, there is no finger-pointing allowed; it is encouraged that you change things even if occasionally, it breaks something. Their idea is to do proper root cause analysis of why it happened to try to prevent it from happening again. It is their strong belief that finger-pointing leads people to simply try things less and less until they actually do nothing anymore... &lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Single Points of Failure&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
they consider software as a potential single point of failure (SPOF)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Principle #4&lt;/b&gt;: you should roll out machines gradually and not start them all at once (ex: when they updated some memory and restarted the systems all at the same time, they all crashed at the same time a week after and it took a complete day to fix!)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Principle #5&lt;/b&gt;: If you lose half your machines, you are still doing well if you serve half your traffic.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Cultural - the strategy is not avoiding errors, but making them cheap&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Test failure conditions (very important, at the production system level, not unit, etc.) &lt;b&gt;If something keeps you up at night, break it! (at least you chose the time frame and not inherit it whenever it happens)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Monitor everything (be wary of using averages which hides everything! Use peaks, std dev., etc.)&lt;/li&gt;
&lt;li&gt;Post Mortems (finding root causes is important - this is not about finger pointing - otherwise people will stop to contribute! it is about knowing exactly what caused what and to avoid this in the future?). &lt;b&gt;If someone does no mistake, it probably means it does nothing!&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Notes from Q&amp;amp;A session:&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;HBase very good with big data sets, MySQL better at random reads&lt;/li&gt;
&lt;li&gt;no polling in browser, they use a server push system&lt;/li&gt;
&lt;li&gt;Weekly push of trunk - no branches! Daily pushes for experiments. - They are tending to move toward a complete daily push.&lt;/li&gt;
&lt;li&gt;Their application is abstracted from the DB/hardware optimization so they can adjust the data model as needed without affecting the application code&lt;/li&gt;
&lt;li&gt;Code vs data schema migrations; they use no SQL schemas but still, the code must match the data. They try to only add fields so they maintain compatibility (code can work with or without the expected piece of new data). They mostly only add.&lt;/li&gt;
&lt;li&gt;Security/User privacy settings. They want the privacy as low as possible in the stacks. They are essentially modeled with &lt;i&gt;graph locks&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;API changes: they would like to do more changes... the API cannot be frozen... they try to manage this interface very carefully...&lt;/li&gt;
&lt;li&gt;They use &lt;i&gt;Cassandra&lt;/i&gt; - really really good for inbox search. Really nice for distribution and load sharing. Not their primary storage however (because of RAID? unsure...)&lt;/li&gt;
&lt;li&gt;Having a good dashboard (which they claim they have) is key to fixing problems faster and more easily. - Is the system OK now? If not, you need maximum data on the situation!&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qconsf2011.blogspot.com/feeds/8685999105676041565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/scaling-social-computing-lessons.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/8685999105676041565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8968606496450201033/posts/default/8685999105676041565'/><link rel='alternate' type='text/html' href='http://qconsf2011.blogspot.com/2011/11/scaling-social-computing-lessons.html' title='Scaling Social Computing - Lessons Learned at Facebook'/><author><name>stevem</name><uri>http://www.blogger.com/profile/13385372192302322819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>