<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Armen Zambrano on Medium]]></title>
        <description><![CDATA[Stories by Armen Zambrano on Medium]]></description>
        <link>https://medium.com/@armenzg?source=rss-d4d8839a88ef------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*gOZWu3-dbYJt8Bd72C7Gkw.jpeg</url>
            <title>Stories by Armen Zambrano on Medium</title>
            <link>https://medium.com/@armenzg?source=rss-d4d8839a88ef------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Mon, 30 Mar 2026 21:56:58 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@armenzg/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Making pip installations faster with wheel]]></title>
            <link>https://armenzg.medium.com/making-pip-installations-faster-with-wheel-e41bed129993?source=rss-d4d8839a88ef------2</link>
            <guid isPermaLink="false">https://medium.com/p/e41bed129993</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[developer-tools]]></category>
            <category><![CDATA[pip]]></category>
            <category><![CDATA[sentryio]]></category>
            <dc:creator><![CDATA[Armen Zambrano]]></dc:creator>
            <pubDate>Thu, 18 Feb 2021 16:24:18 GMT</pubDate>
            <atom:updated>2021-02-18T16:24:18.433Z</atom:updated>
            <content:encoded><![CDATA[<p>I recently noticed the following message in Sentry’s pip installation step:</p><blockquote>Using legacy ‘setup.py install’ for openapi-core, since package ‘wheel’ is not installed.</blockquote><p>Upon some investigation, I noticed that the package <a href="https://pypi.org/project/wheel/">wheel</a> was not being installed. After making <a href="https://github.com/getsentry/sentry/commit/d830eb47b4c60ae45994464e157587b5880cce53">some changes</a>, I can now guarantee that our development environment installs it by default and it’s given us about 40–50% speed gain.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CemfvXzbNdKZu80G7cHFRA.png" /><figcaption>Timings from before and after installing wheel</figcaption></figure><p>The screenshot above shows the steps from two different Github workflows; it installs Sentry’s Python packages inside of a fresh virtualenv and the pip cache is available.</p><p>If you see a message saying that wheelpackage is not installed, make sure to attend to it!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e41bed129993" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Making Big Sur and pyenv play nicely]]></title>
            <link>https://armenzg.medium.com/making-big-sur-and-pyenv-play-nicely-a83d9d9f074a?source=rss-d4d8839a88ef------2</link>
            <guid isPermaLink="false">https://medium.com/p/a83d9d9f074a</guid>
            <category><![CDATA[big-sur]]></category>
            <category><![CDATA[sentry]]></category>
            <category><![CDATA[pyenv]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[Armen Zambrano]]></dc:creator>
            <pubDate>Wed, 03 Feb 2021 22:09:15 GMT</pubDate>
            <atom:updated>2021-02-03T22:09:15.150Z</atom:updated>
            <content:encoded><![CDATA[<p>Soon after Big Sur came out, I received my new work laptop. I decided to upgrade to it. Unfortunately, I quickly discovered that the Python set up needed for <a href="https://sentry.io/">Sentry</a> required some changes. Since it took me a bit of time to figure it out I decided to document it for anyone trying to solve the same problem.</p><p>If you are curious about all that I went through and see references to upstream issues you can visit <a href="https://github.com/getsentry/sentry/issues/22497">this issue</a>. It’s a bit raw. Most important notes are in the first comment.</p><p>On Big Sur, if you try to install older versions of Python you will need to tell pyenv to patch the code. For instance, you can install Python 3.8.7 the typical way ( pyenv install 3.8.7 ), however, if you try to install 3.8.0, or earlier, you will have to patch the code before building Python.</p><pre>pyenv install --patch 3.6.10 &lt; \<br>  &lt;(curl -sSL <a href="https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)`">https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)</a></pre><p>If your pyenv version is lesser than 1.2.22 you will also need to specify LDFLAGS. You can read more about it <a href="https://github.com/pyenv/pyenv/pull/1711">here</a>.</p><pre>LDFLAGS=&quot;-L$(xcrun --show-sdk-path)/usr/lib ${LDFLAGS}&quot; \<br>  pyenv install --patch 3.6.10 &lt; \<br>  &lt;(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)</pre><p>It seems very simple, however, it took me a lot of work to figure it out. I hope I saved you some time!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a83d9d9f074a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Joining Sentry]]></title>
            <link>https://armenzg.medium.com/joining-sentry-cc0f37b6dda7?source=rss-d4d8839a88ef------2</link>
            <guid isPermaLink="false">https://medium.com/p/cc0f37b6dda7</guid>
            <category><![CDATA[mozilla]]></category>
            <category><![CDATA[sentryio]]></category>
            <category><![CDATA[sentry]]></category>
            <dc:creator><![CDATA[Armen Zambrano]]></dc:creator>
            <pubDate>Tue, 19 Jan 2021 17:14:23 GMT</pubDate>
            <atom:updated>2021-01-19T17:14:23.097Z</atom:updated>
            <content:encoded><![CDATA[<p>I’m happy to announce that at the end of 2020 I joined Sentry.io as their second Developer Productivity engineer \o/</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iNTjy6DuR-H6RpFkv4avwg.png" /><figcaption>Screenshot from Sentry.io landing page</figcaption></figure><p>I’m excited to say that it’s been a great fit and that I can make use of most of the knowledge I’ve gained in the last few years. I like the ambition of the company and that they like to make work fun.</p><p>So far, I have been able to help to migrate to Python 3, enabled engineers to bootstrap their Python installation on Big Sur, migrated some CI from Travis to Github actions amongst many other projects.</p><p>If you ship software, I highly recommend you trying Sentry as part of your arsenal of tools to <a href="https://sentry.io/platforms/">track errors and app performance</a>. I used Sentry for many years at Mozilla and it was of great help!</p><p>If you are interested in joining Sentry please visit <a href="https://sentry.io/careers/">the careers page</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cc0f37b6dda7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Farewell, Mozilla]]></title>
            <link>https://armenzg.medium.com/farewell-mozilla-5d52b7110194?source=rss-d4d8839a88ef------2</link>
            <guid isPermaLink="false">https://medium.com/p/5d52b7110194</guid>
            <category><![CDATA[mozilla]]></category>
            <dc:creator><![CDATA[Armen Zambrano]]></dc:creator>
            <pubDate>Thu, 31 Dec 2020 19:16:28 GMT</pubDate>
            <atom:updated>2020-12-31T19:16:28.197Z</atom:updated>
            <content:encoded><![CDATA[<p>The summer of 2020 marked the end of 12 years of working for Mozilla. My career with Mozilla began with an internship during the summer of 2008 when I worked from Building K in 1981 Landings Drive, Mountain View, CA.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HATpbMHtYGiSlrj9DwNiIQ.jpeg" /><figcaption>One of the two buildings Mozilla used at Landings Drive</figcaption></figure><p>Writing this post is hard since Mozilla was such a great place to work at, not only for its altruistic mission, but mostly because of the fantastic people I met during my time there.</p><p>I’m eternally grateful to my Lord Jesus Christ, Who placed me in a workplace where I could grow so much, both as a person and as an engineer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EYB1f7gTQqC4R8mujjWjxw.jpeg" /><figcaption>Photo taken during the Release Engineering work week (Pre-internship)</figcaption></figure><p>I can count dozens of Mozillians I’ve talked and laughed with over the years. I could try unsuccessfully to list each and every one, however I believe it’s better to simply say that I’ve enjoyed every moment with each one of you.</p><p>It’s been a long time since I’ve spoken with many of you and some of you I may never get the chance to talk with again. Nevertheless, if you ever see me somewhere online, please be sure to say hi. I would love to hear from you.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6nCFpfDv4j5UGLN9OVjI9g.jpeg" /><figcaption>Presentation slide from London All Hands</figcaption></figure><p>Mozilla, thank you for the opportunity to help further your mission. I wish you success in 2021 and beyond.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5d52b7110194" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[New backfill action]]></title>
            <link>https://armenzg.medium.com/new-backfill-action-26788d0db81a?source=rss-d4d8839a88ef------2</link>
            <guid isPermaLink="false">https://medium.com/p/26788d0db81a</guid>
            <category><![CDATA[continuous-integration]]></category>
            <category><![CDATA[mozilla]]></category>
            <dc:creator><![CDATA[Armen Zambrano]]></dc:creator>
            <pubDate>Wed, 15 Jul 2020 14:10:42 GMT</pubDate>
            <atom:updated>2020-07-15T14:10:42.592Z</atom:updated>
            <content:encoded><![CDATA[<p>If you use Treeherder on repositories that are not Try, you might have used the backfill action. The backfill action takes a selected task and schedules it nine pushes back from the selected task. You can see the original work <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1639873">here</a> and the follow up <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1650224">here</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zro-HheXgyiwrjkobT0IJw.png" /><figcaption>The mda task on push 48a10a9249b0 has been backfilled</figcaption></figure><p>In the screenshot above you can see that the task mdaturned orange (implying that it failed). In the screenshot we can see that a Mozilla code sheriff has both retriggered the task four more times (you can see four more running tasks on the same push) and has backfilled the task on previous pushes. This is to determine if the regression was introduced on previous pushes or if the failure is due to an intermittent test failure.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/524/1*ueWe3antLnSAdQbEZByjVw.png" /><figcaption>Once you select a task and click on the hamburguer menu you can get to the backfill action</figcaption></figure><p>The difference with the old backfill action is threefold:</p><ol><li>The backfilled tasks include -bk in their symbol and group and it includes the revision of the originating task that was backfilled</li><li>The backfilled tasks schedule the same set of manifests as the starting task</li><li>The backfill action schedules a support action called backfill-task</li></ol><h3>Modified symbol for backfilled tasks</h3><p>The modified symbol and group name for backfilled tasks is to:</p><ol><li>Show that it is a backfilled task (rather than schedule by normal scheduling) and that it can have a modified set of manifests (see next section)</li><li>Show from which task it was backfilled from (by including the revision)</li><li>Group backfilled tasks together to make it clear that they were not scheduled by normal means</li></ol><p>I’ve also <a href="https://github.com/mozilla/treeherder/commit/50005b1b13d1fa3793c61d94a75d2970090d46b3">landed a change</a> on Treeherder to handle this new naming and allow to filter out normal tasks plus backfilled tasks.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/612/1*nGZsg1aPc9LPy90aPLkWzA.png" /><figcaption>From this link you can filter out mda tasks plus mda backfilled tasks</figcaption></figure><h3>Manifest-level backfilling</h3><p>Point number two from the above list is what changes the most. Soon we will be landing a change on autoland that will schedule some test tasks with a dynamic set of manifests. This means that a task scheduled on push A will have a set of manifests (e.g. set X) and the same task on push B can have a different set of manifests (e.g. set Y).</p><p>The new backfill takes this into account by looking at the env variable MOZHARNESS_TEST_PATHS which contains the list of manifests and re-uses that value on backfilled tasks. This ensures that we’re scheduling the same set of manifests in every backfilled task.</p><h3><strong>Support actions</strong></h3><p>You can skip reading this section as this is more of an architectural change. This fixes <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1585757#c12">the issue</a> that backfilled tasks could not be re-run.</p><p>Backfilled tasks are now scheduled by a support action called backfill-task. If on Treeherder we filter by backfill tasks you can see both the initial backfillaction and the backfill-tasksupport action:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*I1WJ9tcg-L9Tr_FNxPNSCw.png" /><figcaption>Two backfill actions were triggered on push 48a10a9249b0</figcaption></figure><p>The action backfill has scheduled nine backfill-task and those are in charge of scheduling the mda task on that push.</p><p>Thanks for reading. Please <a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Firefox%20Build%20System&amp;component=Task%20Configuration">file a bug</a> and CC me if you notice anything going wrong with it.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=26788d0db81a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[In Filter Treeherder jobs by test or manifest path I describe the feature.]]></title>
            <link>https://armenzg.medium.com/in-filter-treeherder-jobs-by-test-or-manifest-path-i-describe-the-feature-2f2c6d04b3d3?source=rss-d4d8839a88ef------2</link>
            <guid isPermaLink="false">https://medium.com/p/2f2c6d04b3d3</guid>
            <category><![CDATA[mozilla]]></category>
            <dc:creator><![CDATA[Armen Zambrano]]></dc:creator>
            <pubDate>Fri, 03 Jul 2020 17:55:16 GMT</pubDate>
            <atom:updated>2020-07-03T17:55:16.960Z</atom:updated>
            <content:encoded><![CDATA[<p>In <a href="https://medium.com/@armenzg/filter-treeherder-jobs-by-test-or-manifest-path-af0e1ae74e61">Filter Treeherder jobs by test or manifest path</a> I describe the feature. In this post I will explain how it came about.</p><p>I want to highlight the process between a conversation and a deployed feature. Many times, it is an unseen part of the development process that can be useful for contributors and junior developers who are trying to grow as developers.</p><p>Back in the Fall of 2019 I started inquiring into developers’ satisfaction with <a href="https://github.com/mozilla/treeherder">Treeherder</a>. This is one of the reasons I used to go to the office once in a while. One of these casual face-to-face conversations led to this feature. <a href="https://github.com/mikeconley">Mike Conley</a> explained to me how he would look through various logs to find a test path that had failed on another platform (see referenced post for further details).</p><p>After I understood the idea, I tried to determine what options we had to implement it. I wrote <a href="https://docs.google.com/document/d/1Os7_-y5OkVSKqUYBgw0FzIed1SoUTQVyFU17f1ve8F8/edit">a Google Doc with various alternative implementations</a> and with information about what pieces were needed for a prototype. I requested feedback from various co-workers to help discover blind spots in my plans.</p><p>Once I had some feedback from immediate co-workers, I made my idea available in a <a href="https://groups.google.com/forum/#!topic/mozilla.tools/yo7xCoD_jiI">Google group</a> (increasing the circle of people giving feedback). I described my intent to implement the idea and was curious to see if anyone else was already working on it or had better ideas on how to implement it. I did this to raise awareness in larger circles, reduce duplicate efforts and learn from prior work.</p><p>I also <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1580893">filed a bug</a> to drive further technical discussions and for interested parties to follow up on the work. Fortunately, around the same time <a href="https://gist.github.com/ahal">Andrew Halberstadt</a> started working on defining explicitly what manifests each task executes before the tasks are scheduled (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1583353">see bug</a>). This is a major component to make the whole feature on Treeherder functional. In some cases, talking enough about the need can enlist others from their domains of expertise to help with your project.</p><p>At the end of 2019 I had time to work on it. Once I endlessly navigated through Treeherder’s code for a few days, I decided that I wanted to see a working prototype. This would validate its value and determine if all the technichal issues had been ironed out. In a couple of days I had a <a href="https://filter-by-test-path-prototype.netlify.app/">working prototype</a>. Most of the code could be copy/pasted into Treeherder once I found the correct module to make changes in.</p><p>Finally, in January <a href="https://github.com/mozilla/treeherder/pull/5794">the feature landed</a>. There were some small bugs and other follow up enhancements later on.</p><p>Stumbling upon this feature was great because on H1 we started looking at changing our CI’s scheduling to use manifests for scheduling instead of tasks and this feature lines up well with it.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2f2c6d04b3d3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Filter Treeherder jobs by test or manifest path]]></title>
            <link>https://armenzg.medium.com/filter-treeherder-jobs-by-test-or-manifest-path-af0e1ae74e61?source=rss-d4d8839a88ef------2</link>
            <guid isPermaLink="false">https://medium.com/p/af0e1ae74e61</guid>
            <category><![CDATA[mozilla]]></category>
            <dc:creator><![CDATA[Armen Zambrano]]></dc:creator>
            <pubDate>Fri, 03 Jul 2020 17:36:04 GMT</pubDate>
            <atom:updated>2020-07-03T17:36:04.247Z</atom:updated>
            <content:encoded><![CDATA[<p>At the beginning of this year we landed a new feature on Treeherder. This feature helps our users to filter jobs using test paths or manifest paths.</p><p>This feature is useful for developers and code sheriffs because it permits them to determine whether or not a test that fails in one platform configuration also fails in other ones. Previously, this was difficult because certain test suites are split into multiple tasks (aka “chunks”). In the screenshot below, you can see that the manifest path <a href="https://treeherder.mozilla.org/#/jobs?repo=autoland&amp;test_paths=devtools%2Fclient%2Fframework%2Fbrowser-toolbox%2Ftest%2Fbrowser.ini&amp;selectedTaskRun=PBW8NJNhTTm6vel1RoydDg-0">devtools/client/framework/browser-toolbox/test/browser.ini</a> is executed in different chunks.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/460/1*eAv7eB6bnyzqmCCL6mQBkg.png" /><figcaption>Showing tasks that executed a specific manifest path</figcaption></figure><p>NOTE: A manifest is a file that defines various test files, thus, a manifest path defines a group of test paths. Both types of paths can be used to filter jobs.</p><p>This filtering method has been integrated to the existing feature, “Filter by a job field” (the funnel icon). See below what the UI looks like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-gtPbw6CegiIU1fbhABvFQ.png" /><figcaption>Filter by test path</figcaption></figure><p>If you’re curious about the work you can visit <a href="https://github.com/mozilla/treeherder/pull/5794">the PR</a>.</p><p>There’s a lot more coming around this realm as we move toward manifest-based scheduling in the Firefox CI instead of task-based scheduling. Stay tuned! Until then keep calm and filter away.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=af0e1ae74e61" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Treeherder developer ergonomics]]></title>
            <link>https://armenzg.medium.com/treeherder-developer-ergonomics-fb2a8ef087eb?source=rss-d4d8839a88ef------2</link>
            <guid isPermaLink="false">https://medium.com/p/fb2a8ef087eb</guid>
            <category><![CDATA[mozilla]]></category>
            <category><![CDATA[docker]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[Armen Zambrano]]></dc:creator>
            <pubDate>Fri, 15 May 2020 21:05:33 GMT</pubDate>
            <atom:updated>2020-05-15T21:05:33.002Z</atom:updated>
            <content:encoded><![CDATA[<p>In the last few months I’ve worked with contributors who wanted to be selected to work on Treeherder during this year’s <a href="https://github.com/mozilla/GSOC2020/blob/master/proposals/treeherder-proposal.md">Google Summer of Code</a>. The initial proposal was to improve various Treeherder developer ergonomics (read: make Treeherder development easier). I’ve had three very active contributors that have helped to make a big difference (in alphabetical order): <a href="https://github.com/mozilla/treeherder/commits?author=imskr">Shubham</a>, <a href="https://github.com/mozilla/treeherder/commits?author=shubhank-saxena">Shubhank</a> and <a href="https://github.com/mozilla/treeherder/commits?author=SuyashSalampuria">Suyash</a>.</p><p>In this post I would like to thank them publicly for all the work they have accomplished as well as list some of what has been accomplished. There’s also listed some work from <a href="https://github.com/klahnakoski">Kyle</a> who tackled the initial work of allowing normal Python development outside of Docker (more about this later).</p><p>After all, I won’t be participating in GSoC due to burn-out and because this project is mostly completed (thanks to our contributors!). Nevertheless, two of the contributors managed to get selected to help with Treeherder (Suyash) and Firefox Accounts (Shubham) for GSoC. Congratulations!</p><p>Some of the developer ergonomics improvements that landed this year are:</p><ul><li><strong>Support running Treeherder &amp; tests outside of Docker.</strong> Thanks to Kyle we can now set up a Python virtualenv outside of Docker and interact with all dependent services (mysql, redis and rabbitmq). This is incredibly useful to run tests and the backend code outside of Docker and to help your IDE install all Python packages in order to better analyze and integrate with your code (e.g., add breakpoints from your IDE). <a href="https://github.com/mozilla/treeherder/commit/7f7ce81589ad4a2c61b823bdcab00f96b027920f">See PR here</a>.</li><li><strong>Support manual ingestion of data.</strong> Before, you could only ingest data when you would set up the Pulse ingestion. This mean that you could only ingest real-time data (and all of it!) and you could not ingest data from the past. Now, you can ingest pushes, tasks and even Github PRs. <a href="https://treeherder.readthedocs.io/installation.html#manual-ingestion">See documentation</a>.</li><li><strong>Add pre-commit hooks to catch linting issues</strong>. Prior to this, linting issues would require you to remember to run a script with all the linters or Travis to let you know. You can now get the linters to execute automatically on modified files (instead of all files in the repo), shortening the linting-feedback cycle. <a href="https://github.com/mozilla/treeherder/blob/master/.pre-commit-config.yaml">See hooks in pre-commit file</a></li><li><strong>Use Poetry to generate the docs</strong>. Serving locally the Treeherder docs is now as simple as running “<em>poetry install &amp;&amp; poetry run mkdocs serve.</em>” No more spinning up Docker containers or creating and activating virtualenvs. We also get to introduce Poetry as a modern dependency and virtualenv manager. <a href="https://github.com/mozilla/treeherder/blob/master/pyproject.toml">See code in pyproject.toml file</a></li><li><strong>Automatic syntax formatting.</strong> The black pre-commit hook now formats files that the developer touches. No need to fix the syntax after Travis fails with linting issues.</li><li><strong>Ability to run the same tests as Travis locally</strong>. In order to reduce differences between what Travis tests remotely and what we test locally, we introduced tox. The Travis code <a href="https://github.com/mozilla/treeherder/blob/master/.travis.yml#L58-L90">simplifies</a>, the tox code can even <a href="https://github.com/mozilla/treeherder/blob/master/tox.ini#L13">automate starting the Docker containers</a> and it removed a bash script that was trying to do what tox does (Windows users cannot execute bash scripts).</li><li><strong>Share Pulse credentials with random queue names</strong>. In the past we required users to set up an account with Pulse Guardian and generate their own PULSE_URL in order to ingest data. Last year, Dustin gave me the idea that we can share Pulse credentials; however, each consumer must ingest from dynamically generated queue names. This was initially added to support Heroku Review Apps, however, this works as well for local consumers. This means that a developer ingesting data would not be taking away Pulse messages from the queue of another developer.</li><li><strong>Automatically delete Pulse queues.</strong> Since we started using shared credentials with random queue names, every time a developer started ingesting data locally it would leave some queues behind in Pulse. When the local consumers stopped, these queues would overgrow and send my team and I alerts about it. With this change, the queues would automatically be destroyed when the consumers ceased to consume.</li><li><strong>Docker set up to automatically ingest data</strong>. This is useful since ingesting data locally required various steps in order to make it work. Now, the Docker set up ingests data without manual intervention.</li><li><strong>Use pip-compile to generate requirement files with hashes.</strong> Before, when we needed to update or add a Python package, we also had to add the hashes manually. With pip-compile, we can generate the requirement files with all hashes and subdepencies automatically. You can see <a href="https://github.com/mozilla/treeherder/tree/f93dc62eb7485606b6d1ed9fff64de966a4a88b5/requirements">the documentation here</a>.</li></ul><p>There’s many more changes that got fixed by our contributors, however, I won’t cover all of them. You can see the complete list in <a href="https://github.com/mozilla/treeherder/projects/3">here</a>.</p><p>Thank you for reading this far and thanks again to our contributors for making development on Treeherder easier!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fb2a8ef087eb" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Join Mozilla’s new chat rooms]]></title>
            <link>https://armenzg.medium.com/join-mozillas-new-chat-rooms-328693ceddb0?source=rss-d4d8839a88ef------2</link>
            <guid isPermaLink="false">https://medium.com/p/328693ceddb0</guid>
            <category><![CDATA[mozilla]]></category>
            <dc:creator><![CDATA[Armen Zambrano]]></dc:creator>
            <pubDate>Fri, 31 Jan 2020 19:22:35 GMT</pubDate>
            <atom:updated>2020-01-31T19:22:35.351Z</atom:updated>
            <content:encoded><![CDATA[<p>For over a decade Mozilla has been using <a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> to publicly chat with anyone interested to join the community. Recently, we’ve launched a replacement for it by creating a <a href="https://chat.mozilla.org/#/welcome">Mozilla community Matrix instance</a>. I will be focusing on simply documenting what the process looks like to join in as a community member (without an LDAP account/Mozilla email address). For the background of the process you can read it <a href="https://discourse.mozilla.org/t/synchronous-messaging-at-mozilla-the-decision/50620">here</a>. Follow along the photos and what each caption says.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*h-qHiHmU14mMletaILxMjA.png" /><figcaption>This is the landing page. Read the participation guideline and click on the “Sign In” button</figcaption></figure><figure><img alt="This image shows another sign in dialogue. Follow the sign-in button and see if any of the options works for me." src="https://cdn-images-1.medium.com/max/1024/1*t5Lg6ZtBlro1j4m8_XhfyA.png" /><figcaption>Follow the sign-in button. If none of the listed options in the next page works for you come back try “Create account”</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/870/1*r9K8aAk6Q_x_49c4EK1Dbg.png" /><figcaption>Use one of the listed services or go back and create an account. Use the email address field only if you have an LDAP account (generally a Mozilla email address)</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sjSMGRHOwgiHwMZi-P8wNQ.png" /><figcaption>After you sign in you will get a system alert. You will need to accept the Privacy Notice and Terms and Conditions before you can use the service</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*y4u1u5y272Qcy0rLvB7_DA.png" /><figcaption>Use the “Explore” button to find the room you’re interested in</figcaption></figure><p>If you have managed to get this far, Welcome to Mozilla’s Matrix! 😄</p><p>NOTE: If there’s an official page documenting the process I’m not aware of it. I will add it once it is published.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=328693ceddb0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Web performance issue — reoccurrence]]></title>
            <link>https://armenzg.medium.com/web-performance-issue-reoccurrence-8f2cb913cc0a?source=rss-d4d8839a88ef------2</link>
            <guid isPermaLink="false">https://medium.com/p/8f2cb913cc0a</guid>
            <dc:creator><![CDATA[Armen Zambrano]]></dc:creator>
            <pubDate>Thu, 30 Jan 2020 16:08:09 GMT</pubDate>
            <atom:updated>2020-01-30T16:08:09.756Z</atom:updated>
            <content:encoded><![CDATA[<h3>Web performance issue — reoccurrence</h3><p>In June we discovered that Treeherder’s UI slowdowns were due to database slow downs (For full details you can read <a href="https://medium.com/@armenzg/a-web-performance-issue-d44093cb896c">this post</a>). After a couple of months of investigations, we did various changes to the RDS set up. The changes that made the most significant impact were doubling the DB size to double our IOPS cap and adding Heroku auto-scaling for web nodes. Alternatively, we could have used <a href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#Concepts.Storage.GeneralSSD">Provisioned IOPS instead of General SSD storage</a> to double the IOPS but the cost was over <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1566204#c3">$1,000/month</a> more.</p><p>Looking back, we made the mistake of not involving AWS from the beginning (I didn’t know we could have used their help). The AWS support team would have looked at the database and would have likely recommended the parameter changes required for a write intensive workload (the changes they recommended during our November outage — see <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1597136">bug 1597136</a> for details). For the next four months we did not have any issues, however, their help would have saved a lot of time and it would have prevented the major outage we had in November.</p><p>There were some good things that came out of these two episodes: the team has learned how to better handle DB issues, there’s improvements we can do to prevent future incidents (see <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1599095">bug 1599095</a>), we created an escalation path and we worked closely as a team to go through the crisis (thanks bobm, camd, dividehex, ekyle, fubar, habib, kthiessen &amp; sclements for your help!).</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8f2cb913cc0a" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>