{"id":2464,"date":"2012-03-02T10:00:54","date_gmt":"2012-03-02T18:00:54","guid":{"rendered":"http:\/\/blog.mozilla.org\/webdev\/?p=2464"},"modified":"2012-03-01T13:13:39","modified_gmt":"2012-03-01T21:13:39","slug":"better-know-a-webdev-kumar-mcmillan-aka-kumar303","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/","title":{"rendered":"Better Know a WebDev: Kumar McMillan (aka kumar303)"},"content":{"rendered":"<p>Welcome back! No, we didn&#8217;t forget about <a href=\"http:\/\/blog.mozilla.org\/webdev\/category\/better-know-a-webdev\/\">our blog profiles<\/a>, but your humble chronicler was away and neglected to get a substitute.<\/p>\n<p>So we return from our brief hiatus with the powerhouse engineer, <strong>Kumar McMillan<\/strong>. In his own words&#8230;<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.mozilla.org\/webdev\/files\/2012\/02\/kumar-records-rio.png\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-2465 aligncenter\" title=\"kumar-records-rio\" src=\"http:\/\/blog.mozilla.org\/webdev\/files\/2012\/02\/kumar-records-rio.png\" alt=\"Kumar in his element\" width=\"500\" height=\"375\" srcset=\"https:\/\/blog.mozilla.org\/webdev\/files\/2012\/02\/kumar-records-rio.png 500w, https:\/\/blog.mozilla.org\/webdev\/files\/2012\/02\/kumar-records-rio-300x225.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<h3>What do you do at Mozilla?<\/h3>\n<p>I work on\u00a0<a href=\"https:\/\/addons.mozilla.org\/\">addons.mozilla.org<\/a>, a large\u00a0<a href=\"https:\/\/github.com\/mozilla\/zamboni\">Django app<\/a>\u00a0that hosts Firefox add-ons. We just launched <a href=\"https:\/\/marketplace.mozilla.org\/\">marketplace.mozilla.org<\/a> for apps which is an exciting new take on <a href=\"http:\/\/hacks.mozilla.org\/2012\/02\/mozillamarketplace-open-for-app-submissions\/\">what an app store can be<\/a>; it runs on the same codebase as the add-ons site. <a href=\"https:\/\/developer.mozilla.org\/en\/Apps\/\">Open web apps<\/a> can run on any device that supports modern web standards and <a href=\"https:\/\/wiki.mozilla.org\/Apps\/WebRT\">WebRT<\/a>, our web runtime. If you buy an app through Mozilla&#8217;s marketplace you can use it in any environment that we support (currently: Mac OS X, Windows, Android). If we don&#8217;t yet support it, you can roll your own by hooking into our <a href=\"https:\/\/developer.mozilla.org\/en\/Apps\/Validating_a_receipt\">receipt verification service<\/a>. Open web apps offer a compelling promise: write your &#8220;native feeling&#8221; app once using web standards and deploy everywhere. Ours is the first app store that doesn&#8217;t lock you into a device and a vertical development silo. It&#8217;s currently not that straight forward to use HTML5, CSS3, and JS to make an app feel &#8220;native&#8221; but the incentives are pretty huge for the community to improve on this so I think we&#8217;ll see it happen (e.g. Twitter&#8217;s <a href=\"http:\/\/twitter.github.com\/bootstrap\/\">bootstrap<\/a>, <a href=\"http:\/\/www.html5rocks.com\/en\/tutorials\/appcache\/beginner\/\">Application Cache<\/a>, etc). There are some other interesting parts of the marketplace that I&#8217;m working on specifically like <a href=\"https:\/\/developer.mozilla.org\/en\/Apps\/In-app_payments\">in-app payments<\/a>.<\/p>\n<h3>Any fun side projects you&#8217;re working on?<\/h3>\n<p>I spend a lot of my free time working on a volunteer-run Internet radio station in Chicago called <a href=\"http:\/\/chirpradio.org\/\">CHIRP Radio<\/a>. I head up their Tech Dept. and help build apps for listening to CHIRP and tools for DJs to use while operating the station. CHIRP Radio is non profit and, it&#8217;s funny, there are a lot of similarities with Mozilla albeit on a much smaller scale. We develop everything in the\u00a0<a href=\"http:\/\/code.google.com\/p\/chirpradio\/\">open<\/a>\u00a0and engage with the open source community, for example.<\/p>\n<p>I also host a radio show Tuesday mornings as DJ Bylamplight and that&#8217;s something else I spend a lot of time on: music. I like to balance my cerebral world of hacking on code with music. It&#8217;s emotional. I love to DJ songs for people because it affects their mood. I also dabble in a recording studio that I share with several engineers and bands. I just finished producing an album for\u00a0<a href=\"http:\/\/www.facebook.com\/summergirlfriends?sk=app_178091127385\">Summer Girlfriends<\/a>\u00a0which was a lot of fun. Oh yeah, and I help run a vinyl label called\u00a0<a href=\"http:\/\/www.addendarecords.com\/\">Addenda<\/a>\u00a0and a cassette label called\u00a0<a href=\"http:\/\/www.plustapes.com\/\">Plustapes<\/a>. People love cassette tapes. It is true.<\/p>\n<h3>How did you get started in web development or programming?<\/h3>\n<p>I went to The School of the Art Institute of Chicago because they had a Sound Department which I thought was a neat idea. As part of my degree I did a lot of different things though: Film, Performance, Art &amp; Technology. In the latter, I took a class where the\u00a0<a href=\"http:\/\/salavon.com\/\">instructor<\/a>\u00a0bravely had us write C code to process images (even though no one had any programming experience). We literally just made X and Y loops of pixels and wrote programs to distort images. It was super fun and from that moment I was hooked. However, art school made me realize I didn&#8217;t want to be in the art scene. The Web was exploding at the time and it felt like the place to be so I taught myself web programming (initially in PHP). The creative process of writing code isn&#8217;t very different than that of building sculptures or painting. There&#8217;s just more typing involved.<\/p>\n<h3>How did you get involved with Mozilla?<\/h3>\n<p>I&#8217;ve used the same online bookmark system since 2002 (don&#8217;t ask) and long before I joined Mozilla I had a folder of bookmarks called Mozilla. I looked up the first thing I ever bookmarked in that folder and it was this link back in 2005: http:\/\/www.mozilla.org\/quality\/smoketests (gone now), which was about the extensive automated test suite for Firefox. I was totally fascinated by this test suite and how they had heat map regression tests for when CSS implementations broke visual layouts. I was very inspired by this when I started to do automated testing. Mozilla felt like a pioneer in this area and many other areas.<\/p>\n<p>Several years after that, Mozilla started doing a lot of work in Python and several people I knew from the open source community started working there. I liked what they were doing with Python and since they were already using some open source libraries I was working on, it was a natural fit. Actually, most of the people we hire in webdev are authors of libraries I&#8217;ve used or are authors of blog posts that turn up regularly when I search for tech help.<\/p>\n<h3>What&#8217;s a funny fail story or mistake you can share?<\/h3>\n<p>I once deployed a bad change to <a href=\"http:\/\/addon.mozilla.org\">addon.mozilla.org<\/a>&#8216;s web service used by Firefox clients that triggered an unexpected traceback on every request. Since these service URLs serve about 8,000 requests a second it killed the cache and basically started to melt down the server cluster (the graphs were ominous). Luckily my new code was behind a feature flag so we could turn it off immediately without having to re-deploy. There ya go kids, always use <a href=\"http:\/\/code.flickr.com\/blog\/2009\/12\/02\/flipping-out\/\">feature flags<\/a>. It was indeed a reminder that our flag based strategy was a good one.<\/p>\n<h3>What&#8217;s something you&#8217;re particularly proud of?<\/h3>\n<p>It still needs some work but I wrote\u00a0<a href=\"https:\/\/github.com\/kumar303\/jstestnet\">JS TestNet<\/a>\u00a0to allow <a href=\"http:\/\/addons.mozilla.org\">addons.mozilla.org<\/a> to run small integration tests for our JavaScript functionality.\u00a0<a href=\"http:\/\/support.mozilla.org\">support.mozilla.org<\/a>\u00a0is using it now as well. Providing a continuous integration framework for JS testing only solves half of the problem though. There is a huge gap in the JS web dev community where barely anyone writes automated tests. All the popular patterns around jQuery and jQuery plugins do not encourage you to write testable code and it&#8217;s hard to retro fit tests into code like that.<\/p>\n<h3>What&#8217;s coming up that you&#8217;re excited about?<\/h3>\n<p>I&#8217;m excited about the\u00a0<a href=\"https:\/\/developer.mozilla.org\/en\/Apps\">Mozilla apps<\/a>\u00a0project and how our <a href=\"https:\/\/developer.mozilla.org\/en\/Apps\/Marketplace_Payments\/\">payment systems<\/a> might instigate new online business models. I&#8217;m excited about apps in general. I can&#8217;t wait to build\u00a0<a href=\"http:\/\/www.ford.com\/technology\/sync\/features\/sync-app-link\/\">apps for cars<\/a>. I love my iPad, my Android tablet, and my Android phone. If we stand by and do nothing, the web is going to become a second class citizen in these apps-centric devices. Mozilla can change that. I think we might even get some major players like Facebook or Google to join in our crusade to appify the the web in an open and egalitarian way if we prove that <a href=\"https:\/\/www.mozilla.org\/en-US\/apps\/\">our concepts<\/a> will work.<\/p>\n<p>I&#8217;m also excited about\u00a0<a href=\"https:\/\/wiki.mozilla.org\/Services\/Sagrada\">Sagrada<\/a>\u00a0and\u00a0<a href=\"https:\/\/wiki.mozilla.org\/Petri\">Petri<\/a>, two projects that aim to build a scalable platform for hosting web applications. One day Mozilla may be able host community apps on these platforms and further our\u00a0<a href=\"http:\/\/www.mozilla.org\/about\/mission.html\">mission<\/a> to keep the web open and accessible to all.<\/p>\n<h3>What question do you wish you&#8217;d been asked?<\/h3>\n<p>How do today&#8217;s open source communities relate to ancient hunter \/ gatherer tribes where shared resources and equality were key components?<\/p>\n<h3>What do you listen to while you work\/program?<\/h3>\n<p>I listen to\u00a0<a href=\"http:\/\/chirpradio.org\/\">CHIRP Radio<\/a>, <a href=\"http:\/\/www.wbez.org\/\">WBEZ<\/a>, <a href=\"http:\/\/www.kcrw.com\/\">KCRW<\/a>,\u00a0<a href=\"http:\/\/wfmu.org\/\">WFMU<\/a>,\u00a0<a href=\"http:\/\/thisismyjam.com\/\">This Is My Jam<\/a>, <a href=\"http:\/\/soundcloud.com\/dashboard\">Soundcloud<\/a>, my record collection, and my mp3 collection. Thanks for asking.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Welcome back! No, we didn&#8217;t forget about our blog profiles, but your humble chronicler was away and neglected to get a substitute. So we return from our brief hiatus with the powerhouse engineer, Kumar McMillan. In his own words&#8230; What &hellip; <a class=\"go\" href=\"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/\">Continue reading<\/a><\/p>\n","protected":false},"author":1438,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13604],"tags":[],"coauthors":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Better Know a WebDev: Kumar McMillan (aka kumar303) - Mozilla Web Development<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"mozilla\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/\",\"url\":\"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/\",\"name\":\"Better Know a WebDev: Kumar McMillan (aka kumar303) - Mozilla Web Development\",\"isPartOf\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.mozilla.org\/webdev\/files\/2012\/02\/kumar-records-rio.png\",\"datePublished\":\"2012-03-02T18:00:54+00:00\",\"dateModified\":\"2012-03-01T21:13:39+00:00\",\"author\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/70ae25c16f09d053c6d8b5eac29dbda9\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/#primaryimage\",\"url\":\"http:\/\/blog.mozilla.org\/webdev\/files\/2012\/02\/kumar-records-rio.png\",\"contentUrl\":\"http:\/\/blog.mozilla.org\/webdev\/files\/2012\/02\/kumar-records-rio.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.mozilla.org\/webdev\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Better Know a WebDev: Kumar McMillan (aka kumar303)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#website\",\"url\":\"https:\/\/blog.mozilla.org\/webdev\/\",\"name\":\"Mozilla Web Development\",\"description\":\"For make benefit of glorious tubes\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.mozilla.org\/webdev\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/70ae25c16f09d053c6d8b5eac29dbda9\",\"name\":\"mozilla\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/image\/e77ee64829d0c3831212656324f746d1\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/75d2017e019c87560fe5d148a64659dc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/75d2017e019c87560fe5d148a64659dc?s=96&d=mm&r=g\",\"caption\":\"mozilla\"},\"url\":\"https:\/\/blog.mozilla.org\/webdev\/author\/mozilla-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Better Know a WebDev: Kumar McMillan (aka kumar303) - Mozilla Web Development","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/","twitter_misc":{"Written by":"mozilla","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/","url":"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/","name":"Better Know a WebDev: Kumar McMillan (aka kumar303) - Mozilla Web Development","isPartOf":{"@id":"https:\/\/blog.mozilla.org\/webdev\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/#primaryimage"},"image":{"@id":"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.mozilla.org\/webdev\/files\/2012\/02\/kumar-records-rio.png","datePublished":"2012-03-02T18:00:54+00:00","dateModified":"2012-03-01T21:13:39+00:00","author":{"@id":"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/70ae25c16f09d053c6d8b5eac29dbda9"},"breadcrumb":{"@id":"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/#primaryimage","url":"http:\/\/blog.mozilla.org\/webdev\/files\/2012\/02\/kumar-records-rio.png","contentUrl":"http:\/\/blog.mozilla.org\/webdev\/files\/2012\/02\/kumar-records-rio.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mozilla.org\/webdev\/2012\/03\/02\/better-know-a-webdev-kumar-mcmillan-aka-kumar303\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.mozilla.org\/webdev\/"},{"@type":"ListItem","position":2,"name":"Better Know a WebDev: Kumar McMillan (aka kumar303)"}]},{"@type":"WebSite","@id":"https:\/\/blog.mozilla.org\/webdev\/#website","url":"https:\/\/blog.mozilla.org\/webdev\/","name":"Mozilla Web Development","description":"For make benefit of glorious tubes","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.mozilla.org\/webdev\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/70ae25c16f09d053c6d8b5eac29dbda9","name":"mozilla","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/image\/e77ee64829d0c3831212656324f746d1","url":"https:\/\/secure.gravatar.com\/avatar\/75d2017e019c87560fe5d148a64659dc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/75d2017e019c87560fe5d148a64659dc?s=96&d=mm&r=g","caption":"mozilla"},"url":"https:\/\/blog.mozilla.org\/webdev\/author\/mozilla-2\/"}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/posts\/2464"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/users\/1438"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/comments?post=2464"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/posts\/2464\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/media?parent=2464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/categories?post=2464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/tags?post=2464"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/coauthors?post=2464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}