<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.2">Jekyll</generator><link href="http://www.averycodes.com/feed.xml" rel="self" type="application/atom+xml" /><link href="http://www.averycodes.com/" rel="alternate" type="text/html" /><updated>2022-11-21T23:30:56-08:00</updated><id>http://www.averycodes.com/feed.xml</id><title type="html">averycodes.github.io</title><subtitle>averycodes portfolio site</subtitle><entry><title type="html">A Fond Farewell</title><link href="http://www.averycodes.com/career/2019/07/19/Farewell-Minerva.html" rel="alternate" type="text/html" title="A Fond Farewell" /><published>2019-07-19T00:00:00-07:00</published><updated>2019-07-19T00:00:00-07:00</updated><id>http://www.averycodes.com/career/2019/07/19/Farewell-Minerva</id><content type="html" xml:base="http://www.averycodes.com/career/2019/07/19/Farewell-Minerva.html">&lt;p&gt;A month ago I had the pleasure of handing over two of Minerva’s first diplomas to these two amazing students from Minerva’s founding class. Over the past 7 years I’ve been involved in bringing life to this endeavor from coding the initial software to living with the students in our first international campus in Berlin. I poured my heart and soul into this project and I couldn’t be prouder of the results.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.averycodes.com/images/minerva-graduation.PNG&quot; alt=&quot;Ignite San Francisco Mission High School&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Today is my last day at Minerva. My time here has been formative and I’m incredibly lucky that Ben Nelson and Jonathan Katzman took a chance on me 7 years ago. I couldn’t be more grateful to the amazing people I’ve shared this journey with. I’m going to desperately miss everyone, but I will always be a friend and cheerleader of Minerva.&lt;/p&gt;

&lt;p&gt;After taking a bit of a summer break I’m incredibly excited to be joining the team at Virta Health working to help individuals reverse type 2 diabetes.&lt;/p&gt;</content><author><name></name></author><category term="career" /><summary type="html">A month ago I had the pleasure of handing over two of Minerva’s first diplomas to these two amazing students from Minerva’s founding class. Over the past 7 years I’ve been involved in bringing life to this endeavor from coding the initial software to living with the students in our first international campus in Berlin. I poured my heart and soul into this project and I couldn’t be prouder of the results.</summary></entry><entry><title type="html">Yearly Goals Summary - 2018</title><link href="http://www.averycodes.com/goals/2018/01/15/Yearly-Goals-Summary.html" rel="alternate" type="text/html" title="Yearly Goals Summary - 2018" /><published>2018-01-15T00:00:00-08:00</published><updated>2018-01-15T00:00:00-08:00</updated><id>http://www.averycodes.com/goals/2018/01/15/Yearly-Goals-Summary</id><content type="html" xml:base="http://www.averycodes.com/goals/2018/01/15/Yearly-Goals-Summary.html">&lt;p&gt;&lt;strong&gt;Mission&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Focusing on “level-ups”: This year public speaking and architecting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Goals&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;#speaking&lt;/em&gt;: Speak at at least once conference or lead at least one pyladies workshop&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;#architecting&lt;/em&gt;: Take architecting skills from Engineer II to Senior Engineer I level&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;#skills&lt;/em&gt;: Improved project estimation through better time tracking and reflection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Habits&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;#speaking&lt;/em&gt;: Keep a semiregular group working on developing talks&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;#architecting&lt;/em&gt;: Focus on written artifacts around architecture during code review&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;#best-practices&lt;/em&gt;: Add test coverage every time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Outcomes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;#speaking&lt;/em&gt;: Submit at least 3 proposals for the 2018 talk cycle&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;#architecting&lt;/em&gt;: Be the lead engineer behind the architecture and design of a new project or a project needing a strong refactor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bookclub&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Two-Scoops-Django-1-11-Practices/dp/0692915729/&quot;&gt;2 Scoops of Django&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Managers-Path-Leaders-Navigating-Growth/dp/1491973897/&quot;&gt;The Managers Path&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name></name></author><category term="goals" /><summary type="html">Mission</summary></entry><entry><title type="html">Selenium Click Capturing</title><link href="http://www.averycodes.com/selenium/2014/10/28/Selenium-Click-Capturing.html" rel="alternate" type="text/html" title="Selenium Click Capturing" /><published>2014-10-28T00:00:00-07:00</published><updated>2014-10-28T00:00:00-07:00</updated><id>http://www.averycodes.com/selenium/2014/10/28/Selenium-Click-Capturing</id><content type="html" xml:base="http://www.averycodes.com/selenium/2014/10/28/Selenium-Click-Capturing.html">&lt;p&gt;If you’ve worked with Selenium for any length of time you’ll have encountered a test where Selenium occassionally errors out with:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Element is not clickable at point (x, x). Other element would receive the click
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In my experience with Selenium, I’ve found the click capturing to be one of the more finicky processes. Let’s take a look at what’s happening.&lt;/p&gt;

&lt;h1 id=&quot;why-this-happens&quot;&gt;Why this happens&lt;/h1&gt;

&lt;p&gt;There are a couple of reasons that another element is recieving a mis-intentioned click. One is that the test is legitimately failing. That is, if a user were to try to click on the jQuery element, another element (like a menu) is over the intended target, obscuring it in some way.&lt;/p&gt;

&lt;p&gt;With tests that are failing sporadically, especially if the click happens soon after page load, there may be another mechanic at work.&lt;/p&gt;

&lt;p&gt;In our tests, when a page was first loading, Selenium would find a button to click and in the time between when the button coordinates were located and the mouse was clicked, CSS reflowing caused the position of the button to be relocated.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.averycodes.com/images/selenium-layout.png&quot; alt=&quot;selenium layout&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;possible-python-selenium-solutions&quot;&gt;Possible (python selenium) Solutions&lt;/h1&gt;

&lt;h2 id=&quot;use-jquery-to-click&quot;&gt;Use jQuery to click&lt;/h2&gt;

&lt;p&gt;If you are using jQuery in your project you can leverage the jQuery click method to click on the button.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;jquery_click&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;css_selector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;execute_script&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;$(&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;selector&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;).click();&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h2 id=&quot;wait-until-its-clickable&quot;&gt;Wait until it’s clickable&lt;/h2&gt;

&lt;p&gt;If you prefer to use the UI (which, after all, is how your end user will be accessing the element), you have to be a little more clever.&lt;/p&gt;

&lt;p&gt;One option is that you can wait until the UI stops moving as demonstrated in code below:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;time&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;selenium.common&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;exceptions&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s_exc&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;selenium.webdriver.support.ui&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ui&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;wait_until_clickable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;css_selector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;wait&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ui&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WebDriverWait&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;stopped_moving&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;element&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;until&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;EC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;element_to_be_clickable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;By&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CSS_SELECTOR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;css_selector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;initial&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;location&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sleep&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.05&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;element&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;until&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;EC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;element_to_be_clickable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;By&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CSS_SELECTOR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;css_selector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;location&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;initial&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;final&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s_exc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StaleElementReferenceException&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;False&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;until&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;stopped_moving&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;until&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;EC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;element_to_be_clickable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;By&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CSS_SELECTOR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;css_selector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h2 id=&quot;elaborate-click-function&quot;&gt;elaborate click function&lt;/h2&gt;

&lt;p&gt;In our integration tests we use a combination of the two methodologies above creating an elaborate click function that we use instead of the simple &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;click()&lt;/code&gt; provided by selenium. This has drastically cut down the flakeyness of our tests.&lt;/p&gt;

&lt;h1 id=&quot;other-reasons-click-may-not-work&quot;&gt;Other reasons click() may not work&lt;/h1&gt;

&lt;h2 id=&quot;make-sure-the-middle-is-clickable&quot;&gt;Make sure the middle is clickable&lt;/h2&gt;

&lt;p&gt;In selenium, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;click()&lt;/code&gt; function clicks on the middle of an element. If your element is unclickable at that point you’re going to have a problem.&lt;/p&gt;

&lt;h2 id=&quot;make-sure-the-window-containing-the-clicked-element-is-in-front&quot;&gt;Make sure the window containing the clicked element is in front&lt;/h2&gt;

&lt;p&gt;Sometimes when you’re not looking the window you are trying to interact with will be backgrounded. Check out this article on foregrounding the window- &lt;a href=&quot;http://elementalselenium.com/tips/4-work-with-multiple-windows&quot;&gt;Working with Multiple Windows&lt;/a&gt;&lt;/p&gt;</content><author><name></name></author><category term="selenium" /><summary type="html">If you’ve worked with Selenium for any length of time you’ll have encountered a test where Selenium occassionally errors out with:</summary></entry><entry><title type="html">Correct Uses of onShow and onRender in Marionette</title><link href="http://www.averycodes.com/marionettejs/2013/11/15/Correct-Uses-of-onShow-and-onRender-in-Marionnette.html" rel="alternate" type="text/html" title="Correct Uses of onShow and onRender in Marionette" /><published>2013-11-15T00:00:00-08:00</published><updated>2013-11-15T00:00:00-08:00</updated><id>http://www.averycodes.com/marionettejs/2013/11/15/Correct-Uses-of-onShow-and-onRender-in-Marionnette</id><content type="html" xml:base="http://www.averycodes.com/marionettejs/2013/11/15/Correct-Uses-of-onShow-and-onRender-in-Marionnette.html">&lt;p&gt;For the past few months, I have been consistently stymied by Marionette’s built-in onShow and onRender methods.&lt;/p&gt;

&lt;p&gt;In a single-page app, you often manipulate the DOM Tree instead of doing full page reloads. &lt;a href=&quot;http://marionettejs.com/&quot;&gt;Marionette.js&lt;/a&gt; is a handy &lt;a href=&quot;http://backbonejs.org/&quot;&gt;backbone&lt;/a&gt; library that provides a clean way to execute this manipulation in the form of its Layouts and Views. It is often convenient to know when a View’s DOM subtree has successfully been inserted into the DOM and is jQuery accessible.&lt;/p&gt;

&lt;p&gt;This is where the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onRender()&lt;/code&gt; methods can come in handy.&lt;/p&gt;

&lt;h1 id=&quot;what-the-docs-say&quot;&gt;What the docs say&lt;/h1&gt;

&lt;h2 id=&quot;onrender&quot;&gt;onRender&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;“render” / onRender event&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;Triggered after the view has been rendered. You can implement this in your view to provide custom code for dealing with the view’s el after it has been rendered.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;from &lt;a href=&quot;https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.itemview.md#render--onrender-event&quot;&gt;Marionette ItemView Docs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;onshow&quot;&gt;onShow&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;A region will raise a few events when showing and closing views:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;“show” / onShow - Called on the view instance when the view has been rendered and displayed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;“show” / onShow - Called on the region instance when the view has been rendered and displayed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;from &lt;a href=&quot;https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.region.md&quot;&gt;Marionette Region Docs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This does not present us a full picture of why, when, and how we should use these methods.&lt;/p&gt;

&lt;h1 id=&quot;what-the-docs-should-say&quot;&gt;What the docs should say&lt;/h1&gt;

&lt;h2 id=&quot;onrender-1&quot;&gt;onRender&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onRender()&lt;/code&gt; was a misleading term for me. “onRender”, I said to myself, “The sounds like it would be invoked when DOM elements have been &lt;em&gt;rendered&lt;/em&gt; by the browser.”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.averycodes.com/images/false-meme.jpg&quot; alt=&quot;false meme&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onRender()&lt;/code&gt; gets triggered when the View’s DOM subtree is prepared for insertion into the DOM but before those elements are viewable.&lt;/strong&gt; Putting code in the onRender function of your view will NOT guarantee that you will have jQuery access to these newly created elements.&lt;/p&gt;

&lt;h2 id=&quot;onshow-1&quot;&gt;onShow&lt;/h2&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; method is used in the context of Layouts and Regions. A Marionette Layout may have many “Regions” that will later be populated with sub-Views. These sub-Views are instantiated when a Layout invokes its region’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.show()&lt;/code&gt; method with the View to be rendered.&lt;/p&gt;

&lt;p&gt;When &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.show()&lt;/code&gt; is invoked, the DOM subtree for that sub-View is constructed and inserted into the DOM. A “show” event then triggers any code in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; methods in both the Layout and the sub-View.&lt;/p&gt;

&lt;h1 id=&quot;proper-use&quot;&gt;Proper Use&lt;/h1&gt;

&lt;p&gt;Code in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onRender()&lt;/code&gt; will be executed reliably &lt;strong&gt;every&lt;/strong&gt; time &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;this.render()&lt;/code&gt; is called by the view. You should include code that needs to be called every time you would update that View. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onRender()&lt;/code&gt; does not assure you jQuery access to the View’s DOM elements. Code that relies on DOM elements should be in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; method.&lt;/p&gt;

&lt;p&gt;Code in in both the Layout and the sub-View’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; methods will be executed &lt;strong&gt;every&lt;/strong&gt; time &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;someRegion.show(subView)&lt;/code&gt; is called by the Layout. The Layout may not call &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.show()&lt;/code&gt; every time you update that sub-View. Code that needs to be run on every rendering should be in the sub-View’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onRender()&lt;/code&gt;.&lt;/p&gt;

&lt;h1 id=&quot;improper-use&quot;&gt;Improper Use&lt;/h1&gt;

&lt;p&gt;The triggering of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; methods will behave unexpectedly if you do not handle handle nested &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.show()&lt;/code&gt; method calls carefully. Below is a diagram of a concrete example of deeply nested layouts and views that illustrate this:
&lt;img src=&quot;http://www.averycodes.com/images/marionette-on-show.png&quot; alt=&quot;Deeply nested views&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;layout-a-snippet&quot;&gt;Layout A Snippet&lt;/h2&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;nx&quot;&gt;regions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nl&quot;&gt;regionAOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.region-a-one&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;regionATwo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.region-a-two&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;onRender&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;regionAOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;LayoutB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;// wrong&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;regionATwo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ViewA&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h2 id=&quot;layout-b-snippet&quot;&gt;Layout B Snippet&lt;/h2&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;nx&quot;&gt;regions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nl&quot;&gt;regionBOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.region-b-one&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;regionBTwo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.region-b-two&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;onRender&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;regionBTwo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ViewC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;// wrong&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;regionBOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ViewB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h2 id=&quot;view-c-snippet&quot;&gt;View C Snippet&lt;/h2&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;nx&quot;&gt;onShow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$el&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;class-name&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;In this example, in &lt;strong&gt;View C&lt;/strong&gt; we will run into a javascript error: &lt;em&gt;cannot call addClass of undefined&lt;/em&gt;. But wait! Shouldn’t &lt;strong&gt;View C&lt;/strong&gt;’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; method only be invoked if &lt;strong&gt;View C&lt;/strong&gt;’s DOM Tree elements are properly in the DOM?&lt;/p&gt;

&lt;p&gt;We see this unexpected behavior because in the deeply nested layouts, rather than waiting for &lt;strong&gt;Layout B&lt;/strong&gt;’s DOM subtree to be viewable, &lt;strong&gt;View C&lt;/strong&gt; is instantiated in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onRender()&lt;/code&gt; method. We see the same in &lt;strong&gt;Layout A&lt;/strong&gt; in regards to &lt;strong&gt;Layout B&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this case the order of events is as follows:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Layout A&lt;/strong&gt; comes into being (probably from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.show()&lt;/code&gt; call by its parent.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;When &lt;strong&gt;Layout A&lt;/strong&gt;’s DOM subtree has been constructed &lt;strong&gt;Layout B&lt;/strong&gt; and &lt;strong&gt;View A&lt;/strong&gt; are instantiated using &lt;strong&gt;regionAOne&lt;/strong&gt; and &lt;strong&gt;regionATwo&lt;/strong&gt;’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.show()&lt;/code&gt; methods.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;When &lt;strong&gt;Layout B&lt;/strong&gt;’s DOM subtree has been constructed &lt;strong&gt;View B&lt;/strong&gt; and &lt;strong&gt;View C&lt;/strong&gt; are instantiated using &lt;strong&gt;regionBone&lt;/strong&gt; and &lt;strong&gt;regionBTwo&lt;/strong&gt;’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.show()&lt;/code&gt; methods.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Layout A&lt;/strong&gt;’s DOM subtree is visible in the DOM.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; in &lt;strong&gt;Layout A&lt;/strong&gt;, &lt;strong&gt;Layout B&lt;/strong&gt;, &lt;strong&gt;View C&lt;/strong&gt;, etc. are all triggered at the same time.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Layout B&lt;/strong&gt;’s DOM subtree is visible in the DOM.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;View C&lt;/strong&gt;’s DOM subtree is visible in the DOM.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;corrected-layout-a-snippet&quot;&gt;Corrected Layout A Snippet&lt;/h2&gt;

&lt;p&gt;To ensure that each DOM subtree is inserted into the DOM before the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; method is called, move the region &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.show()&lt;/code&gt; code to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; method of the Layout:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;nx&quot;&gt;regions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nl&quot;&gt;regionAOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.region-a-one&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;regionATwo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.region-a-two&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;onShow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;regionAOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;LayoutB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;// correct&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;regionATwo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ViewA&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;If you are unable to access jQuery DOM elements in an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; method, trace your way through your Layout/View hierarchy and find the culprit whose region calls &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.show()&lt;/code&gt; in a non-&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onShow()&lt;/code&gt; method.&lt;/p&gt;</content><author><name></name></author><category term="marionettejs" /><summary type="html">For the past few months, I have been consistently stymied by Marionette’s built-in onShow and onRender methods.</summary></entry><entry><title type="html">Ignite San Francisco</title><link href="http://www.averycodes.com/women/2013/11/13/Ignite-San-Francisco.html" rel="alternate" type="text/html" title="Ignite San Francisco" /><published>2013-11-13T00:00:00-08:00</published><updated>2013-11-13T00:00:00-08:00</updated><id>http://www.averycodes.com/women/2013/11/13/Ignite-San-Francisco</id><content type="html" xml:base="http://www.averycodes.com/women/2013/11/13/Ignite-San-Francisco.html">&lt;p&gt;I’ve been to Mission High school twice in the past couple of months for an event put on by Ignite, an organization started in Seattle to connect young women in middle and high school with professional women working in STEM fields.&lt;/p&gt;

&lt;p&gt;These are low-key events where small groups of high school women gather in a classroom and spend 10-15 minutes chatting with each of speakers about their experiences leading up to their career in a STEM field. And these careers were varried! We had game designers, and structural engineers. Biomedical engineers and environmental analysts. Data analytics and software engineering.&lt;/p&gt;

&lt;p&gt;Being able to chat with other women about the choices they’d made, struggles they’d faced, and successes they’d acheived was certainly great for these young counterparts:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“I really like learning what people do in life because I could grow up and take their footsteps.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“The most exciting thing to me today was learning about all the different types of jobs there are and even though women aren’t in that many technical jobs, more and more are going in every day.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Not all of them were interested in what they are doing now when they were my age”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“I saw the inside of a Mac.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.averycodes.com/images/ignite_sf.jpg&quot; alt=&quot;Ignite San Francisco Mission High School&quot; /&gt;
&lt;em&gt;Ellen Norton talks about her experiences in STEM with young women from Mission High School&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;However, for me I got even more out of the experience than these young women did. I realize that it’s rare for me to interact with so many interesting, qualified women. I am the only woman in my development team and have been my whole career starting with my first mechanical engineering internship at OSRAM Sylvania.&lt;/p&gt;

&lt;p&gt;Sure, I go to women who code events and the like but there’s something unique about hearing a bunch of other women talk passionately about what they do and encourage others to follow their footsteps. It reminds me how lucky I am.&lt;/p&gt;</content><author><name></name></author><category term="women" /><summary type="html">I’ve been to Mission High school twice in the past couple of months for an event put on by Ignite, an organization started in Seattle to connect young women in middle and high school with professional women working in STEM fields.</summary></entry></feed>